两个类有共同的方法和属性

时间:2015-12-16 08:21:37

标签: c# .net class dynamic duck-typing

我有两节课。

A类:

class A() {
    public void QQ() {}
    public void WW() {}
}

和B组:

class B() {
    public void QQ() {}
    public void WW() {}
}

他们不共享相同的界面或抽象类。 A和B有两个截然不同的层次,我现在无法改变它。

我想编写一个适用于A和B的程序,并使用QQ和WW方法。

我能这样做吗?你能建议我可以研究的任何文件吗?

3 个答案:

答案 0 :(得分:8)

这称为Duck Typing

您可以使用动态

void Foo(dynamic dy)
{
    dy.QQ();
}

您也可以使用反射。 (reference

public static void CallQQ(object o)
{
    var qq = o.GetType().GetMethod("QQ");
    if (qq != null)
        qq.Invoke(o, new object[] { });
    else
        throw new InvalidOperationException("method not found");
}

答案 1 :(得分:4)

您可以检查对象是否属于特定类型,然后将其强制转换并调用其方法:

controls

在C#6中,您可以将其简化为

void InvokeQQ(object o){
    if(o is A)
        (o as A).QQ();
    if(o is B)
        (o as B).QQ();
}

答案 2 :(得分:-1)

你能不能创建一个父类并将这些方法放入其中,然后让A和B从该类继承?