两个 class 具有共同的方法和属性
two class with common methods and properties
我有两个 class。
Class答:
class A() {
public void QQ() {}
public void WW() {}
}
和Class乙:
class B() {
public void QQ() {}
public void WW() {}
}
它们不共享相同的接口或抽象 class。
A 和 B 有两个不同的层次结构,我目前无法更改。
我想写一个适用于 A 和 B 的单一程序,并使用 QQ 和 WW 方法。
我能做到吗?你能推荐我可以研究的文件吗?
坦克
您可以检查对象是否属于特定类型,然后转换它并调用它的方法:
void InvokeQQ(object o){
if(o is A)
(o as A).QQ();
if(o is B)
(o as B).QQ();
}
在 C#6 中,您可以将其简化为
void InvokeQQ(object o){
(o as A)?.QQ();
(o as B)?.QQ();
}
这叫做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");
}
你不能创建一个父对象 class 并将这些方法放入其中,然后让 A 和 B 继承那个 class 吗?
我有两个 class。
Class答:
class A() {
public void QQ() {}
public void WW() {}
}
和Class乙:
class B() {
public void QQ() {}
public void WW() {}
}
它们不共享相同的接口或抽象 class。 A 和 B 有两个不同的层次结构,我目前无法更改。
我想写一个适用于 A 和 B 的单一程序,并使用 QQ 和 WW 方法。
我能做到吗?你能推荐我可以研究的文件吗?
坦克
您可以检查对象是否属于特定类型,然后转换它并调用它的方法:
void InvokeQQ(object o){
if(o is A)
(o as A).QQ();
if(o is B)
(o as B).QQ();
}
在 C#6 中,您可以将其简化为
void InvokeQQ(object o){
(o as A)?.QQ();
(o as B)?.QQ();
}
这叫做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");
}
你不能创建一个父对象 class 并将这些方法放入其中,然后让 A 和 B 继承那个 class 吗?