gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:54:04 32 4
gpt4 key购买 nike

我们不能在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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com