0

我正在构建一个需要 Scriptable 对象的 Unity 扩展。使用 Scriptable 对象时,用户必须使用 ScriptableObject.createInstance() 实例化从 ScriptableObject 继承的类。因此,如果我们需要向实例提供更多信息以完全初始化它,我们就不得不使用两步初始化模型。

我想知道使用 2 个步骤(使用构造函数创建和使用 Init() 方法初始化)初始化对象时的最佳实践。

我发现的主要问题是,由于您需要在派生类中专门化 Init() 方法以适应对专门化对象的初始化,因此您会获得越来越多的 Init() 方法,因为由于使用的参数不同,签名不匹配。

我遇到了这个问题的两种解决方案:

1) 隐藏父方法并为未完全实例化专用类型的 Init() 方法抛出异常。

2) 使用仅公开有效初始化方法的包装类。

这两个对我来说似乎都很麻烦。这就是为什么我想听听其他人是如何克服这个问题的。

澄清问题的一个例子:

public class Class1 : ScriptableObject
{
    public virtual void Init()
    {
        Debug.Log("Class1::Init()");
    }
}

public class Class2 : Class1
{
    int myParameter;
    public virtual void Init(int parameter)
    {
        Debug.Log("Class3::Init()");
    }
}

//I could now do something like this. And the Class2 object
//Would contain an invalid state because myParameter wasn't initialized
Class2 c= ScritableObject.CreateInstance<Class2>();
c.Init();
4

0 回答 0