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的所有者说声谢谢,感谢他们提供了如此精彩的网站。。。。