我正在玩数据构建器模式,但我无法理解某些行为。我在下面写了我想要实现的简化版本
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("");
}
}
现在它将为我创建孩子,智能感知也显示我可以这样做 new DataBuilderChild().WithId(1).WithDescription(""); 但是,当我尝试构建它时,它失败了。我不明白为什么我无法访问此方法?它是公开的,并且可以通过智能感知看到。任何人都可以解释如何使它工作吗?谢谢
编辑
错误消息是:错误 1 无法将类型 'TestProgram.Program.DataBuilderParent' 隐式转换为 'TestProgram.Program.MyChild' C:\Apps\TestProgram\Program.cs 44 29 TestProgram