gpt4 book ai didi

C# 如何避免类型转换为子类?

转载 作者:太空狗 更新时间:2023-10-30 00:19:12 26 4
gpt4 key购买 nike

假设我有一个名为 Shape 的基类。然后是一些子类,例如圆形和方形。

然后让我们在另一个名为 GetShape 的类中创建一个方法:

public Shape GetShape()
{
return new Circle();
}

好吧,我的想法是,我可以传入一个 shapeType,然后返回一个强类型的 Shape 子类。上面的示例是对实际代码的大量简化,但我认为它能说明问题。

那么当我调用这个方法时它会是什么样子

var shapeCreator = new ShapeCreator();
Circle myCircle = shapeCreator.GetShape();

唯一的问题是它甚至不会运行,因为它需要转换。

这实际上可行:

Circle myCircle = (Circle) shapeCreator.GetShape(); 

我对这种类型转换并不感冒,我怎样才能避免它并仍然完成一种让方法返回基类的方法,这样我就可以返回任何兼容的子类。

最佳答案

您可以为此使用泛型,即使没有反射。此示例在 T 上使用无参数构造函数过滤器(从 Adil 更改的示例):

public T GetShape<T>() where T : Shape, new()
{
return new T();
}

关于C# 如何避免类型转换为子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951834/

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