流れるように順序付けられたコンストラクターのインターフェイスを作成しています。次のコードを書きました。
public interface IMyObjectFactory: IObjectWithProperty
{
int objectId { get; set; }
IObjectWithProperty WithObjectId(int id);
}
public interface IObjectWithProperty
{
IObjectWithProperty WithObjectId(int id);
MyObject Create();
}
2番目のインターフェースは、コンストラクターメソッドで順序を強制する必要があります
インプリはこれです:
public class MyObjectFactory: IMyObjectFactory
{
public int objectId { get; set; }
private MyObjectFactory() { }
public static IObjectWithProperty BeginCreation()
{
return new ObjectFactory();
}
public IObjectWithProperty WithObjectId(int id)
{
objectId = id;
return this;
}
public MyObject Create()
{
return new MyObject(this);
}
}
そして、これは私の目的です:
public class MyObject
{
public int Id { get; set; }
public MyObject(IMyObjectFactory factory)
{
this.Id = factory.objectId;
}
}
だから私は書くことができます
MyObject mo = MyObjectFactory.BeginCreation().WithObjectId(1).Create();
しかし:
- コンストラクターのインターフェイスと実装の両方でプロパティを定義する必要があり、あまり好きではありません
- 静的 BeginCreation メソッドにはインターフェイスがありません
- 内部で必要な間は、impl プロパティを public に設定する必要があります
- インターフェイスで、次の警告が表示されます。
Warning 7 'FunzIA.DL.Factory.Interfaces.IMyObjectFactory.WithObjectId(int)' hides inherited member 'FunzIA.DL.Factory.Interfaces.IObjectWithProperty.WithObjectId(int)'. Use the new keyword if hiding was intended.
しかし、これは新しい方法ではなく、順序を強制するために 2 番目のインターフェイスが必要です
なにか提案を?ありがとう