4

我在该类中有一个通用类,我编写了一种方法,该方法应接受object该类的对象作为参数。

功能如下-

protected void AddNewForm(object o )
{
    try
    {
        o.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我正在从另一个类调用这个函数。但是当我将此函数称为-

Contact objContact=new Contact(); 
AddNewForm(objContact);

但它显示了该函数中的错误。错误为-

“object”不包含“Show”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Show”(您是否缺少 using 指令或程序集引用?)

如何在 C# windows 应用程序中实现后期绑定?

谢谢。

4

2 回答 2

7

如果您使用 .NET 4,则可以使用 newdynamic关键字:

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);
    }
}
于 2011-05-27T12:41:20.303 回答
0

对于仍在寻找这种东西的人,我发现https://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0非常有帮助,我不会发布全部内容在这里,但如果它过时,它也可以在 Wayback 机器上使用

于 2020-06-23T01:54:13.737 回答