我会尽力解释自己,但英语不是我的母语。
总而言之:我想重写子类中的变量类型或类似的东西,所以我的子类始终拥有每个类的“最新”版本。
现在,我有 2 个班级 >
Animal
和 AnimalAnimator
,两个班级都有自己的子班级 Dog
和 DogAnimator
。
Animal
类看起来像这样:
public class Animal : MonoBehaviour
{
public AnimalAnimator Animator { get; private set; }
private virtual void Awake()
{
Animator = GetComponent<AnimalAnimator>();
[code...]
}
}
我想对狗做这样的事情:
public class Dog : Animal
{
public new DogAnimator Animator { get; private set; }
private override void Awake()
{
base.Awake();
Animator = GetComponent<AnimalAnimator>();
}
}
我希望
Dog
扩展 Animal
,并用 AnimalAnimator
覆盖 DogAnimator
组件(扩展 DogAnimator
。但是 Unity 给了我这个错误:
The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(Dog) <Animator>k__BackingField
这在 C# 中可能吗?我该如何继续?
非常感谢。
您可以使用泛型,如下面的代码示例。
class Animal<TAnimator> : MonoBehaviour where TAnimator : AnimalAnimator
{
public TAnimator Animator { get; private set; }
public void Awake()
{
Animator = GetComponent<TAnimator>();
}
}
class Dog : Animal<DogAnimator>
{
public void Awake()
{
base.Awake();
}
}