如何在C#中实现LateBinding
作者:互联网
我在该类中有一个通用类我已经编写了一个方法,它应该接受对象类的对象作为参数.
功能如下 –
protected void AddNewForm(object o )
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我正在从另一个类调用此函数.但当我把这个功能称为 –
Contact objContact=new Contact();
AddNewForm(objContact);
但它显示该函数中的错误.错误如下 –
‘object’ does not contain a definition
for ‘Show’ and no extension method
‘Show’ accepting a first argument of
type ‘object’ could be found (are you
missing a using directive or an
assembly reference?)
如何在C#windows应用程序中实现后期绑定?
谢谢.
解决方法:
如果使用.NET 4,则可以使用新的dynamic关键字:
protected void AddNewForm(dynamic o)
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果您不使用.NET 4,则必须使用反射.
然后看起来像这样:
protected void AddNewForm(object o)
{
try
{
o.GetType().GetMethod("Show", new Type[0]).Invoke(o, null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但你真的应该考虑使用一个通用的界面:
interface IShowable
{
void Show();
}
class Contact : IShowable
{
public void Show() { /* ... */ }
}
protected void AddNewForm(IShowable o)
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
标签:c,object,late-binding 来源: https://codeday.me/bug/20190614/1237022.html