【发布时间】:2013-01-23 19:28:34
【问题描述】:
我希望这个问题的标题能准确地概括问题。以下是详细信息:
我有两个共享多个属性和相关方法的类,让我们来看看 MyFirstClass 和 MySecondClass。因此,我将这组相交的属性放入我的两个类都继承自的抽象类中:MyAbstractBaseClass。
到目前为止,一切都很好。但是,在我代码中其他地方的方法中,我正在操作这些共享属性,并希望能够通过引用将 MyFirstClass 和 MySecondClass 的实例传递给此方法。类似的东西:
result1 = myMethod(ref MyFirstClass);
result2 = myMethod(ref MySecondClass);
我尝试使用 MyAbstractBaseClass 作为我的方法的参数类型:
public bool myMethod(ref MyAbstractBaseClass anObject)
但这不被编译器接受。我还尝试从 MyAbstractBaseClass 中提取接口,并让 MyFirstClass 和 MySecondClass 都从 MyAbstractBaseClass 继承并实现接口,如下所示:
public class MyFirstClass : MyAbstractBaseClass, IMyAbstractBaseClass
public class MySecondClass : MyAbstractBaseClass, IMyAbstractBaseClass
然后我期望 myMethod 能够对两个类进行操作,如果我将接口的参数设置为 IMyAbstractBaseClass 类型(毕竟,在 OOP 中,您应该尽可能针对接口进行编码)。
public bool myMethod(ref IMyAbstractBaseClass anObject)
IMyAbstractBaseClass myObject = new MyFirstClass();
result1 = myMethod(ref myObject);
这也不起作用。编译器说无法将 MyFirstClass 转换为 IMyAbstractBaseClass,这对我来说似乎很奇怪,因为 MyFirstClass 实现了接口,因此我应该能够将此类的所有对象都视为类型接口,不是吗?
我在这里错过了什么?
【问题讨论】:
-
我认为您对继承的工作方式有些困惑。你能发布具体类、抽象类和接口的简化代码吗?
标签: c# class inheritance interface abstract