Exi*_*ist 6 c# inheritance abstract-class
这可能是一个初学者的问题,但是有一种标准方法可以将Wheel属性的重复重构为抽象类,但仍然保持对Part类型的显式强制转换.我们假设我们必须阻止将FastCarWheel放在SlowCar上,并且有许多属性就像这样.
abstract class Car {}
class FastCar : Car
{
public FastCarWheel Wheel { get; set; }
}
class SlowCar : Car
{
public SlowCarWheel Wheel { get; set; }
}
abstract class WheelPart {}
class FastCarWheel: WheelPart {}
class SlowCarWheel: WheelPart {}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只允许这种类型的复制是常见的吗?我正在考虑使用泛型,但似乎我正在解决这个问题,并且每个额外的属性都会变得更糟.
abstract class Car <P>
where P : Part
{
protected abstract P Wheel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
谢谢
定义一个轮子接口(IWheel):
public interface IWheel
{
}
Run Code Online (Sandbox Code Playgroud)
实现 FastCarWheel 和 SlowCarWheel 的接口,例如
public class FastCarWheel : IWheel
{
}
Run Code Online (Sandbox Code Playgroud)
现在你的抽象类变成:
abstract class Car
{
public IWheel Wheel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后 Car 的子类可以自由使用他们选择的任何 Wheel 实现:
FastCar fastCar = new FastCar();
fastCar.Wheel = new FastCarWheel();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |