我想知道是否有一种方法可以在派生类中使用不同类型覆盖具有相同名称的变量。有些事情(虽然这段代码不会编译):
public class A
{
public virtual Point2D Point; // Represent a 2D point
}
public class B : A
{
public override Point3D Point; // Represent a 3D point
}
这样做的原因是A
和B
可能共享相似的属性,只是Point
的维度不同。
答案 0 :(得分:5)
您在谈论Generics
。
public class YourBaseClass<T>
where T: class
{
public T Point { get; set; }
}
public class A : YourBaseClass<Point2D>
{
}
public class B : YourBaseClass<Point3D>
{
}
所以,当你打电话时
var a = (new A()).Point;
var type = a.GetType();
A
实例的点类型为Point2D
(或此示例中为null
,因为尚未初始化引用类型属性。)
var point2D = (new A()).Point as Point2D;
注意:在这种情况下使用泛型的原因是为派生类指定Point
属性的返回类型。
使用泛型是比使用virtual
关键字更好的解决方案,以隐藏基类的属性并定义new
一个(也就是执行阴影)。现在你有一个具有“可设置”返回类型的基本属性,而不是具有相互隐藏的多个属性。