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

时间:2021-07-20 14:35:32

标签: c# unity3d inheritance

我确定我正在寻找的内容已经在某处讨论过,但我找不到。 我想知道围绕我要构建的系统通常的最佳实践是什么:

假设我有一个带有数据容器的基类(统一为 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,它具有误导性且容易出错。

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

2 个答案:

答案 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>
{
}
相关问题