gpt4 book ai didi

c# - C# 中的泛型和继承类型

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

我对处理这种特殊情况的最佳方式有点困惑。我对使用泛型还不是 100% 有信心。

我有课,Model ,它有两个派生类型,3DModel2DModel .

我在 Model 中有一个抽象属性类View ,它也有两个派生类型,3DView2DView .

3DModel调用 View属性(property),我想要3DView返回,据我所知这是泛型的来源(目前 2D 和 3D 版本只有它们自己的派生类型属性)。

我的问题是,要做到这一点,我认为我需要更改 ModelModel<TView>然后提供 3DModel 中的位置和 2DModel .这需要更改 Model 的每次使用, 2DModel3DModel为了适应这一点,它绝对无处不在(包括,据我所知,不可能将 Model 的实例转换为 3DModel2DModel )。

我认为这是实现它的唯一方法是否正确?对于如此简单的事情,似乎有很多额外的代码。

编辑:

一些示例代码

public class View
{
}

public class 3DView : View
{
}

public class Model
{
public abstract View _view {get; set;}
}

public class 3DModel : Model
{
public override 3DView _view {get; set;}
}

我收到 Visual Studio 错误“覆盖属性时无法更改返回类型”。

最佳答案

您可以保留您的非泛型模型类,并引入一个抽象的泛型模型类。

public abstract class Model<TView> : Model where TView : View
{
public new TView _view
{
get { return base._view as TView; }
set { base._view = value; }
}
}

public class View3D : View { }

public class Model3D : Model<View3D> { }

public class View2D : View { }

public class Model2D : Model<View2D> { }

关于c# - C# 中的泛型和继承类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33568922/

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