gpt4 book ai didi

c# 是否可以更改父类的字段类型?

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:36 24 4
gpt4 key购买 nike

如果我有两个类(class)一个用于数据,例如:

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 的新的呢?我的意思是,我希望能够在新领域同时使用子项和父项的功能。

最佳答案

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>
}

关于c# 是否可以更改父类的字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48618384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com