GoodPractice:类继承与..可继承的可脚本化对象



我确信我要找的东西已经在某个地方讨论过了,但我找不到。我想知道围绕我想要构建的系统,通常的最佳实践是什么:

假设我有一个带有数据容器的基类(ScriptableObject是统一的,但可以用标准类推广到C#(:

public class Employee: MonoBehaviour
{
[SerializeField]
protected EmployeeSO _employeeSO;
// ...
}
public class EmployeeSO : ScriptableObject
{
public string employeeName;
}

现在,让我们假设我想从Employee那里继承,以创建一个拥有更多权限的经理:

public class Manager: MonoBehaviour
{
[SerializeField]
protected ManagerSO _managerSO;
// ...
}
public class ManagerSO : EmployeeSO
{
public string role;
}

让ManagerSO从EmployeeSO继承是有意义的IMO-关于特定管理器的所有数据都将在同一个ScriptableObject容器中。

然而,我仍然引用了_emplateSO,它具有误导性并且容易出错。

如果我想保持实际数据的分离,那么进行这种继承的正确方法是什么?

所以我对Unity一无所知,它是serialization系统,但在C#中,泛型是可行的:

public class Employee<T>: MonoBehaviour where T: class
{
[SerializeField]
protected T _scriptableObject;
}
public class Employee: Employee<EmployeeSO> {
}
public class Manager: Employee<ManagerSO > {
}

您可以使用泛型

public abstract class Person<T> : MonoBehaviour
where T : EmployeeSO
{
[SerializeField]
protected T _personSO;
// ...
}
public class Employee : Person<EmployeeSO>
{
}
public class Manager : Person<ManagerSO>
{
}

最新更新