覆盖具有相同名称但属性不同的属性

时间:2016-05-11 07:01:49

标签: c# inheritance

我想知道是否有一种方法可以在派生类中使用不同类型覆盖具有相同名称的变量。有些事情(虽然这段代码不会编译):

public class A
{
    public virtual Point2D Point; // Represent a 2D point
}

public class B : A
{
    public override Point3D Point; // Represent a 3D point
}

这样做的原因是AB可能共享相似的属性,只是Point的维度不同。

1 个答案:

答案 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一个(也就是执行阴影)。现在你有一个具有“可设置”返回类型的基本属性,而不是具有相互隐藏的多个属性。