我想知道是否有一种方法来覆盖派生类中具有不同类型的同名变量.有点像这样的东西(虽然这段代码不会编译):
public class A
{
public virtual Point2D Point; // Represent a 2D point
}
public class B : A
{
public override Point3D Point; // Represent a 3D point
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是,A
并且B
可能共享相似的属性,只是它的维度Point
不同.
你在说什么Generics
.
public class YourBaseClass<T>
where T: class
{
public T Point { get; set; }
}
public class A : YourBaseClass<Point2D>
{
}
public class B : YourBaseClass<Point3D>
{
}
Run Code Online (Sandbox Code Playgroud)
所以,当你打电话的时候
var a = (new A()).Point;
var type = a.GetType();
Run Code Online (Sandbox Code Playgroud)
A
实例的点的类型是Point2D
(或者null
在此示例中,因为引用类型属性尚未初始化.)
var point2D = (new A()).Point as Point2D;
Run Code Online (Sandbox Code Playgroud)
注意:在这种情况下使用泛型的原因是Point
为派生类指定属性的返回类型.
使用泛型比使用virtual
关键字更好的解决方案是为了隐藏基类的属性并定义一个属性new
(也就是执行阴影).现在你有一个具有"可设置"返回类型的基本属性,而不是具有相互隐藏的多个属性.
归档时间: |
|
查看次数: |
929 次 |
最近记录: |