私は非ジェネリックビルダークラスで暗黙の演算子を使用する場合、すべてのものはOKです:これは一般的な暗黙の演算子を使って何が問題になっていますか?
public class ReligionBuilder
{
private Religion _religion;
public ReligionBuilder()
{
_religion = new Religion(){//some codes}
}
public ReligionBuilder AddToRepository()
{
Repository<Religion>.Add(_religion);
return this;
}
public Religion Build()
{
return _religion;
}
public static implicit operator Religion(ReligionBuilder _builder)
{
return _builder.Build();
}
}
私はそれを使用することができます。
Religion religion=new ReligionBuilder().AddToRepository();
が、この演算子は、何かが間違っている一般的なクラスである場合:
public abstract class DataTestBuilderBase<T> : IDataTestBuilder<T>
{
protected T TestData { get; set; }
public virtual T Build()
{
return TestData;
}
public abstract IDataTestBuilder<T> AddToRepository();
public abstract IDataTestBuilder<T> WithDefault();
public static implicit operator T(DataTestBuilderBase<T> builder)
{
return builder.Build();
}
}
public class PersonDataTestBuilder : DataTestBuilderBase<Person>
{
private Person _person;
public PersonDataTestBuilder()
{
//some codes
}
public override IDataTestBuilder<Person> AddToRepository()
{
//some codes
return this;
}
}
用法:
PersonDataTestBuilder _testBuilder = new PersonDataTestBuilder();
Person person = _testBuilder.AddToRepository();
エラー:IDataTestBuilderをPersonに変換できません
何が問題なのですか?
私たちは独自の実装ビルダを使い始めましたが、http://nbuilder.org/を使用して終了しました。これは本当にうれしく、多くの機能を備えています。 –