我在那个班上有一个普通班我写了一个方法,它应该接受object
类的对象作为参数。
功能如下 -
protected void AddNewForm(object o )
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我正在从另一个类调用此函数。但当我将此功能称为 -
时Contact objContact=new Contact();
AddNewForm(objContact);
但它显示该函数中的错误。错误为 -
'object'不包含定义 对于'显示'而没有扩展方法 '显示'接受第一个论点 类型'对象'可以找到(是你 缺少使用指令或 装配参考?)
如何在C#windows应用程序中实现后期绑定?
感谢。
答案 0 :(得分:7)
如果您使用.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);
}
}
答案 1 :(得分:0)
对于仍在寻找这种东西的人,我发现https://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0很有帮助,我不会在此处发布全部内容,但是如果过时了,它也可以在Wayback机器上使用