继承设计:如何使方法在基类 (C#) 上运行
本文关键字:基类 运行 方法 何使 继承 | 更新日期: 2023-09-27 17:55:54
我希望这个问题的标题能准确地总结这个问题。以下是详细信息:
我有两个共享多个属性和相关方法的类,让我们 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实现了接口,因此我应该能够将此类的所有对象视为类型接口,不是吗?
我在这里错过了什么?
参数真的需要通过 ref 传递吗?
如果它们是引用类型(即类)(并且它们是),并且您只对它们设置属性,则不需要通过引用传递它们。 (通过引用传递引用是具有指向指针的指针)
只有在要替换整个对象的情况下,才需要 ref:
public bool myMethod(ref IMyAbstractBaseClass anObject)
{
myObject = new MyFirstClass();
return true;
}
public bool myMethod2(MyAbstractBaseClass anObject)
{
myObject.SomeProperty = 5;
return true;
}
IMyAbstractBaseClass myObject = new MyFirstClass();
result1 = myMethod(ref myObject);
result1 = myMethod2(myObject);
myMethod2() 将完全按照您想要的方式工作。
不要通过引用传递参数,除非出于某种奇怪的原因,您需要将方法参数分配给不同的对象,这通常不是要走的路。"Ref"参数不支持抽象类。
C# 不是C++。它不会在没有 ref
关键字的情况下创建整个对象的副本。它将引用的副本(基本上是一个指针)传递给方法中。