初始化从单行为派生的对象的最佳方法是什么?



我们不能在从Monopahavior派生的类中使用构造函数,所以我们定义了"Initialze";模拟构造函数的方法,定义如下:

public class Animal : Monobehavior
{
public void Initialize(string animalName)
{
// initialze animal
}
}

然后,有一个dog类,它有不同的初始化参数列表:

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());

问题来了,我们还是可以称之为"初始化("dog-name"(;没有Bone参数,与C#构造函数不同,如果有一天我喝醉了,写下了愚蠢的代码(或者其他人来写(,那将是一个大麻烦。

那么,有没有一种最好的方法来初始化从monoehavior派生的对象呢?

您可以分支出基本动物的实例化。您可以将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);
}
}

相关内容

最新更新