C# 构建器之间的继承-如何处理类型?
我用C#编写了这个生成器(当然,这个示例是简化的): 它是这样使用的:C# 构建器之间的继承-如何处理类型?,c#,oop,design-patterns,builder,C#,Oop,Design Patterns,Builder,我用C#编写了这个生成器(当然,这个示例是简化的): 它是这样使用的: Bus bus = new BusBuilder() .WithWheels(someWheels) .WithRoute(50) .Build() class VehicleBuilder<T> where T : VehicleBuilder<T> { private T @this; protected VehicleBuilder()
Bus bus =
new BusBuilder()
.WithWheels(someWheels)
.WithRoute(50)
.Build()
class VehicleBuilder<T> where T : VehicleBuilder<T>
{
private T @this;
protected VehicleBuilder()
{
// Or pass it in as a constructor parameter
@this = (T) this;
}
public T WithWheels(...)
{
return @this;
}
}
现在,我想提取一个只包含一些方法的超类:
class VehicleBuilder
{
Wheels mWheels = DefaultWheels;
public VehicleBuilder WithWheels(Wheels aWheels)
{
mWheels = aWheels;
return this;
}
}
class BusBuilder : VehicleBuilder
{
...
}
问题是我现在不会写字了
Bus bus =
new BusBuilder()
.WithWheels(someWheels)
.WithRoute(50)
.Build()
因为WithWheels
返回的是VehicleBuilder
而不是BusBuilder
,因此不定义WithRoute
方法
您将如何设计它?在继承方面,构建器模式有点麻烦。您可以这样做:
Bus bus =
new BusBuilder()
.WithWheels(someWheels)
.WithRoute(50)
.Build()
class VehicleBuilder<T> where T : VehicleBuilder<T>
{
private T @this;
protected VehicleBuilder()
{
// Or pass it in as a constructor parameter
@this = (T) this;
}
public T WithWheels(...)
{
return @this;
}
}
class VehicleBuilder,其中T:VehicleBuilder
{
私人T@this;
受保护车辆制造商()
{
//或者将其作为构造函数参数传入
@this=(T)this;
}
带轮子的公共T(…)
{
返回@this;
}
}
然后:
类总线生成器:车辆生成器
{
...
}
此时,您的WithWheels
方法仍将返回一个BusBuilder
,因此您仍然可以调用WithRoute
您还需要在每个派生类生成器中使用一个新的Build
方法,请注意