我确定我正在寻找的内容已经在某处讨论过,但我找不到。 我想知道围绕我要构建的系统通常的最佳实践是什么:
假设我有一个带有数据容器的基类(统一为 ScriptableObject,但可以使用标准类推广到 C#):
public class Employee: MonoBehaviour
{
[SerializeField]
protected EmployeeSO _employeeSO;
// ...
}
public class EmployeeSO : ScriptableObject
{
public string employeeName;
}
现在,假设我想从 Employee 继承来创建一个拥有更多权限的 Manager :
public class Manager: MonoBehaviour
{
[SerializeField]
protected ManagerSO _managerSO;
// ...
}
public class ManagerSO : EmployeeSO
{
public string role;
}
让 ManagerSO 从 EmployeeSO 继承是有意义的 IMO - 有关特定经理的所有数据都将位于同一个 ScriptableObject 容器中。
但是,我仍然引用了 _employeeSO,它具有误导性且容易出错。
如果我想将实际数据分开,那么进行这种继承的正确方法是什么?
答案 0 :(得分:0)
所以我对 Unity 一无所知,它是 public class Employee<T>: MonoBehaviour where T: class
{
[SerializeField]
protected T _scriptableObject;
}
public class Employee: Employee<EmployeeSO> {
}
public class Manager: Employee<ManagerSO > {
}
系统,但在 C# 中,泛型是要走的路:
{{1}}
答案 1 :(得分:0)
你可以使用泛型
public abstract class Person<T> : MonoBehaviour
where T : EmployeeSO
{
[SerializeField]
protected T _personSO;
// ...
}
public class Employee : Person<EmployeeSO>
{
}
public class Manager : Person<ManagerSO>
{
}