c# - 我如何编写一个函数来返回从 C# 中的基类派生的任何对象?

标签 c# generics

我有一个基类,比如 A。

我从那个基类派生了一堆其他类,比如 A1、A2、A3 ...

我有第三个类,比如 B。它拥有的方法之一需要能够返回任何派生自 A 的类。

我尝试了以下方法:

public T getObject<T>() where T : A
{
   return (new A1());
}

然而,这会返回一个错误,指出无法将类型 A1 转换为 T。

这个通用的返回可以实现吗?

最佳答案

如果您知道您的类将从 A 继承,但不需要知道确切的类型,那么您不需要泛型:

public A getObject()
{
    return new A1();
}

如果您的示例已编译,则意味着您可以调用

A2 result = getObject<A2>();

但是您对 getObject 的实现总是返回一个 new A1()。因为 A1 没有继承 A2,所以这是错误的。

听起来您可能希望根据某些神秘逻辑的结果返回不同的类型。这很好,仍然不需要泛型:

public A getObject()
{
    switch(MysteryLogic())
    {
        case MysteryLogicResult.One:
            return new A1();
        case MysteryLogicResult.Two:
            return new A2();
        case MysteryLogicResult.Three:
            return new A3();
    }
}

关于c# - 我如何编写一个函数来返回从 C# 中的基类派生的任何对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100526/

相关文章:

c# - 如何在asp.net-core webapi中使用unity-container拦截

node.js - Javascript - 从数据库模式生成 REST 服务器和 HTML 客户端

java - 如何使用一种方法收集并返回具有一个泛型类型参数的实例?

swift - 如何创建一个快速的通用可变参数函数?

c# - 为什么要在 C# 中对 boolean 值使用 |= 运算符?

c# - 如何用 Ilnumerics 矩阵计算克罗内克和?

c# - 为 NSUncaughtExceptionHandler 引发异常

c# - 无需安装oracle客户端的oracle远程连接

java - 为什么在 Java 中使用泛型时必须指定 <?>?

asp.net-mvc-3 - MVC3 Razor 编辑器/显示模板和泛型