我们不能在Monobehavior的派生类中使用构造函数,所以我们定义了“Initialze”方法来模拟构造函数,定义如下:
public class Animal : Monobehavior
{
public void Initialize(string animalName)
{
// initialze animal
}
}
然后是狗类,它有不同的初始化参数列表:
public class Dog : Animal
{
// Cannot override because different parameter list
public void Initialize(string animalName, Bone favoriteBone)
{
base.Initialize(animalName);
// initialze dog
}
}
然后,我们像这样创建动物对象:
var animalInstance = Instantiate(animalPrefab);
animalInstance.Initialize("animal name");
然后我们像这样创建狗对象:
var dogInstance = Instantiate(dogPrefab);
dogInstance.Initialize("dog name", new Bone());
问题来了,我们仍然可以在没有 Bone 参数的情况下调用“dogInstance.Initialize("dog name")”,这与 C# 构造函数不同,如果有一天我喝醉了并写下了愚蠢的代码(或者其他人来写它),这是一个很大的麻烦。
那么,有没有最好的方法来初始化从 monobehavior 派生的对象?
最佳答案
您可以分支出基本动物的实例化。您可以将 Animal
类设为 abstract
基类(其 Initialize(string)
受到 protected
) .
您可以从 Animal
派生 SimpleAnimal
,当您想要实例化一些基本动物时将使用它。然后你将有 Animal 派生自和 SimpleAnimal 实例化。
例如喜欢
public abstract class Animal : MonoBehaviour
{
public string Name { get; private set; }
protected void Initialize(string animalName)
{
Name = animalName;
}
}
public class Dog : Animal
{
public void Initialize(string animalName, Bone favoriteBone)
{
base.Initialize(animalName);
// initialze dog
}
}
public class SimpleAnimal : Animal
{
public new void Initialize(string animalName)
{
base.Initialize(animalName);
}
}
关于c# - 初始化从单一行为派生的对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63933268/