如果您只想摆脱无参数构造函数代码而不是构造函数本身 - 鉴于这种类型的反序列化需要它 - 您可以删除这两个构造函数并使用工厂方法来创建节点。这将导致该类具有默认的公共构造函数。
例如,更改:
public class FancyNode : Node
{
private IController controller;
public string ID
{
get;
private set;
}
// I would really like to get rid of this constructor
public FancyNode()
{
throw new NotSupportedException();
}
// NOTICE: no default constructor here
public FancyNode(IController controller, string id)
{
this.controller = controller;
this.ID = id;
}
}
至:
public class FancyNode : Node
{
private IController controller;
public string ID
{
get;
private set;
}
public static FancyNode CreateNode(IController controller, string id)
{
var node = new FancyNode();
node.controller = controller;
node.ID = id;
return node;
}
}
是的,你失去了严格的控制,不允许在不传递这些参数的情况下创建对象,因为现在任何人都可以这样做var x = new FancyNode()
。然后你又没有验证参数,所以用 . 调用它没有区别new FancyNode(null, null)
。