1

データビルダーのパターンで遊んでいますが、いくつかの動作を理解できていません。私が達成しようとしていることのこの単純化されたバージョンを以下に書きました

    public abstract class DataBuilderParent
    {
        private MyParent myParent;

        protected void SetDataBuilder(MyParent myParent)
        {
            this.myParent = myParent;
        }

        public DataBuilderParent WithId(int id)
        {
            myParent.Id = id;
            return this;
        }
    }

    public class DataBuilderChild : DataBuilderParent
    {
        private readonly MyChild myChild = new MyChild();

        public DataBuilderChild()
        {
            base.SetDataBuilder(myChild);
        }

        public DataBuilderChild WithDescription(string description)
        {
            myChild.Description = description;
            return this;
        }

        private MyChild Build()
        {
            return myChild;
        }

        public static implicit operator MyChild(DataBuilderChild dataBuilder)
        {
            return dataBuilder.Build();
        }
    }

    public class MyParent
    {
        public int Id { get; set; }
    }

    public class MyChild : MyParent
    {
        public string Description { get; set; }
    }

上記のコードの使用法

   internal class Program
   {
     private static void Main(string[] args)
     {
        MyChild child = new DataBuilderChild().WithDescription("");
     }
   }

これで子が作成されます。また、インテリセンスは、この新しい DataBuilderChild().WithId(1).WithDescription(""); を実行できることを示しています。ただし、ビルドしようとすると失敗します。このメソッドにアクセスできない理由がわかりません。それは公開されており、インテリセンスによって表示されます。誰かがそれを機能させる方法を説明できますか? ありがとうございました

編集

エラー メッセージは次のとおりです。エラー 1 型 'TestProgram.Program.DataBuilderParent' を 'TestProgram.Program.MyChild' に暗黙的に変換できません C:\Apps\TestProgram\Program.cs 44 29 TestProgram

4

2 に答える 2