如果我有2个班级 一个用于数据,例如:
public class Cords
{
public double x;
public double y;
}
和一个,使用这个数据:
public class Geometry
{
public Cords()
{
points = new List<Cords>();
}
public void SomeMathWithPoints()
{
MagicWithPoints(points);
}
protected List<Cords> points;
}
我想用一些特定的函数,使用继承来扩展这个类,但这次我需要一些Cords类的附加数据。 所以我试着这样做:
public class ExtendedCords: Cords
{
public double x;
public double y;
public string name;
}
public class ExtendedGeometry : Geometry
{
protected SomeNewMagicWithPoints(){...}
protected List<ExtendedCords> points;
}
但我注意到,如果我愿意的话:
ExtendedGeometry myObject = new ExtendedGeometry();
myObject.SomeMathWithPoints();
此功能将使用旧(parrents)字段points
。那么如何才能使用ExtendedCords
类型的新版本?我的意思是,我希望能够在新领域使用child和parrent的功能。
答案 0 :(得分:6)
为Geometry
基类和虚方法使用泛型类型:
public class Geometry<TCord> where TCord : Cords
{
public void InitCords(){
points = new List<TCord>();
}
public virtual void SomeMathWithPoints(){
MagicWithPoints(points);
};
protected List<TCord> points;
}
然后在您的扩展程序中
public class ExtendedGeometry : Geometry<ExtendedCords>
{
public override SomeNewMagicWithPoints(){...}
// no need for a redefinition of points since it is inherited from the base class Geometry<ExtendedCords>
}