编程语言
首页 > 编程语言> > 如何在C#中实现LateBinding

如何在C#中实现LateBinding

作者:互联网

我在该类中有一个通用类我已经编写了一个方法,它应该接受对象类的对象作为参数.

功能如下 –

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应用程序中实现后期绑定?

谢谢.

解决方法:

如果使用.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);
    }
}

标签:c,object,late-binding
来源: https://codeday.me/bug/20190614/1237022.html