【发布时间】:2017-05-12 17:40:00
【问题描述】:
我想知道构造类的最佳实践,以便在类有祖父母时调用父方法。
假设我有这种情况:
public class Vehicle { // parent
public bool moves;
public bool flies;
public float maxSpeed;
public virtual void Initialize () {
moves = true;
}
}
public class Airplane : Vehicle { // child
public override void Initialize () {
base.Initialize ();
flies = true;
}
}
public class Jet : Airplane { // grandchild
public override void Initialize () {
base.Initialize ();
maxSpeed = 400f;
}
}
现在,如果我实例化一个 Jet 对象,它将运行 Vehicle 初始化,但不是 Airplane 父代码(意味着它不会飞行)。
有一些解决方法。一个是将 Airplane 代码移动到每个子类中,但这违背了使用 OOP 的目的。解决此问题的最佳做法是什么?
注意:我不能使用构造函数,因为这是一个 Unity3D 应用程序,所有附加到 GameObject 的类都应该继承自 MonoBehaviour 类,并且它有自己的初始化函数,如 Awake() 和Start(),并且不允许允许构造函数。
【问题讨论】:
-
什么是构造函数?
-
@EdPlunkett 您可以在此处了解有关构造函数的更多信息:docs.microsoft.com/en-us/dotnet/articles/csharp/…:p
-
@RufusL 如果网络上有一些资源可以自动回答这样的问题。
-
如果这段代码以一种无需手动编辑即可编译的方式编写,那就太好了。
-
代码中没有任何意义。为什么使用初始化方法而不是构造函数?为什么初始化器是私有的?为什么它们不是虚拟的?为什么你认为 Jet 对象不会调用基方法?为什么字段初始化器不是字段初始化器?我无法回答这个问题。