我们有三个班级;
Line
PoliLine
SuperPoliLine
对于所有三个类Distance
已定义。
但只有Line
才能设置Distance
。
是否有可能构建一个共同的抽象(MustInherit)类 Segment
,具有 Distance
as(抽象+? ReadOnly )成员?
VB.NET 的问题,但也欢迎C#答案。
业务背景
想象一下公共汽车。它有很多Station
s,MainStation
和2 TerminalStation
s。因此 Line 位于2个工作站之间, PoliLine 位于2 MainStation
s之间,而SuperPoliLine
位于2个TerminalStations之间。所有“行”都是“段”,但只能定义2个站之间的距离A-> B < - em> Line 。
答案 0 :(得分:1)
您不能同时覆盖和重新声明(添加集合) - 但您可以这样做:
基类:
protected virtual int FooImpl { get; set; } // or abstract
public int Foo { get { return FooImpl; } }
派生类:
new public int Foo {
get { return FooImpl; }
set { FooImpl = value; }
}
// your implementation here...
protected override FooImpl { get { ... } set { ... } }
现在您也可以根据需要覆盖FooImpl。
答案 1 :(得分:1)
由于您希望它在一个类中可设置但在其他类中无法设置,我通常不会使用属性为“特殊”(在本例中为setter)。
public class Segment
{
protected int _distance;
public int Distance { get { return _distance; } }
}
public class Line : Segment
{
public int SetDistance(int distance) { _distance = distance; }
}
答案 2 :(得分:1)
public class Segment
{
private int distance;
public virtual int Distance
{
get { return distance; }
set { distance = value; }
}
}
public class Line : Segment
{
public override int Distance
{
get { return base.Distance; }
set
{
// do nothing
}
}
}
编辑版本:
public abstract class Segment
{
public abstract int Distance { get; set; }
}
public class Line : Segment
{
private int distance;
public override int Distance
{
get { return distance; }
set
{
// do nothing
}
}
}