我们不能在从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);
}
}