如何在C#中实现LateBinding
本文关键字:实现 LateBinding | 更新日期: 2023-09-27 17:57:53
我在这个类中有一个通用类,我写了一个方法,它应该接受object
类的对象作为参数。
功能如下-
protected void AddNewForm(object o )
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我从另一个类调用这个函数。但是当我把这个函数称为-时
Contact objContact=new Contact();
AddNewForm(objContact);
但它显示了该函数中的错误。错误为-
"object"不包含定义对于"Show"和无扩展方法"Show"接受的第一个参数可以找到类型"object"(你是缺少using指令或装配参考?)
如何在C#应用程序中实现后期绑定?
谢谢。
如果使用。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);
}
}
对于任何仍在寻找我发现的这种东西的人https://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0非常有用,我不会在这里发布全部内容,但如果它过时了,它也可以在wayback机器上使用