Pri*_*nka 4 c# object late-binding
我在该类中有一个通用类我已经编写了一个方法,它应该接受object
类的对象作为参数.
功能如下 -
protected void AddNewForm(object o )
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在从另一个类调用此函数.但当我把这个功能称为 -
Contact objContact=new Contact();
AddNewForm(objContact);
Run Code Online (Sandbox Code Playgroud)
但它显示该函数中的错误.错误如下 -
'object'不包含'Show'的定义,也没有扩展方法'Show'接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)
如何在C#windows应用程序中实现后期绑定?
谢谢.
如果使用.NET 4,则可以使用new dynamic
关键字:
protected void AddNewForm(dynamic o)
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用.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);
}
}
Run Code Online (Sandbox Code Playgroud)
但你真的应该考虑使用一个通用的界面:
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);
}
}
Run Code Online (Sandbox Code Playgroud)