C# 如何在C中实现LateBinding#
我在这个类中有一个普通类,我已经编写了一个方法,它应该接受C# 如何在C中实现LateBinding#,c#,object,late-binding,C#,Object,Late Binding,我在这个类中有一个普通类,我已经编写了一个方法,它应该接受对象类的对象作为参数 功能如下- protected void AddNewForm(object o ) { try { o.Show(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 我从另一个类调用这个函数。但是当我把这个函数称为- Contact objContact=new C
对象
类的对象作为参数
功能如下-
protected void AddNewForm(object o )
{
try
{
o.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我从另一个类调用这个函数。但是当我把这个函数称为-
Contact objContact=new Contact();
AddNewForm(objContact);
但它显示了该函数中的错误。错误为-
“对象”不包含定义
对于“Show”和无扩展方法
“显示”接受的第一个参数
找不到类型“object”(是否为
缺少using指令或
装配参考?)
如何在C#windows应用程序中实现后期绑定
谢谢。如果您使用.NET 4,您可以使用新的
动态
关键字:
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);
}
}
对于仍在寻找我发现非常有用的此类内容的任何人,我不会在这里发布全部内容,但如果wayback machine过时,它也可以在wayback machine上使用请确保您的第一节课中没有错误it@Daniel希尔加思:我用的是.NET4,根据您的答复,我使用了第一个代码,但出现了以下错误
无法定义使用“dynamic”的类或成员,因为找不到编译器所需的类型“System.Runtime.CompilerServices.DynamicAttribute”。是否缺少对System.Core.dll的引用?
第二个错误是-找不到编译动态表达式所需的一个或多个类型。您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用?
Controls\frmBaseListView.cs 198 17 MSGBL`@Daniel Hilgarth:我还编写了第二个代码,然后在运行时显示错误,因为发现了模糊匹配@Richa:和。。。您是否在项目中引用了提到的DLL@丹尼尔·希尔加思:非常感谢。。您的第二个代码在我的应用程序中运行良好。。我想对Stack overflow的所有者说声谢谢,感谢他们提供了如此精彩的网站。。。。