我在该类中有一个通用类,我编写了一个方法,它应该接受 object
类的对象作为参数。
函数如下-
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 应用程序中实现后期绑定(bind)?
谢谢。
最佳答案
如果您使用 .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):
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# - 如何在C#中实现LateBinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152347/