コンストラクター自体ではなく、パラメーターなしのコンストラクター コードのみを削除する場合 (そのタイプの逆シリアル化に必要な場合)、両方のコンストラクターを削除し、ファクトリ メソッドを使用してノードを作成できます。これにより、デフォルトのパブリック コンストラクターを持つクラスが生成されます。
たとえば、次のように変更します。
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)
。