c# - 如何在C#中实现LateBinding

标签 c# object late-binding

我在该类中有一个通用类,我编写了一个方法,它应该接受 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/

相关文章:

c# - 在 .NET 中使用正则表达式提取 URL

c# - 使用angularjs将多个对象发送到webapi

javascript - 通过引用特定属性名称从 Javascript JSON 对象获取值

java - 在类之间打印 boolean boolean 值

java - 通过 Java 中的依赖注入(inject)进行继承(后期绑定(bind))

c# - jQuery 函数来激活 onclick 方法?

c# - 总和除以 4 的数组数

JavaScript 对象使用 .检索值

dynamic - 在 Django 中,如何后期绑定(bind)未绑定(bind)的表单?

java - Java 中的绑定(bind)和调度有什么区别?