非泛型方法是否可以返回泛型类型?

索力士

在Java中,我可以轻松地编写:

public interface MyInterface<T extends Object>

然后有一个在运行时确定T的方法,例如:

public MyInterface<?> DetermineObjectAtRuntime()

但是在C#中<?>不可用,我需要用type调用方法;这意味着我需要事先了解类型。

  1. 是否可以从非泛型方法返回泛型类型?
  2. 如果没有,如果我有一个具有该类型的对象实例,我该如何算出类型来调用这种通用方法?

对于不确定这是什么目的的人-我有一组数据结构,这些数据结构使用不同的枚举作为字段索引器。所有消息均从具有该枚举类型变量的通用通用接口扩展而来。现在,我需要设计一种从byte []数组反序列化所有不同类型消息的方法。

尼古拉斯·凯里

在C#中,您可以使用通用方法:

class Foo<X>
{
  public T DoSomethingFunky<T>( ... )
  {
    ...
  }
}

但是没有办法使用通配符类型-C#中的一个重大失败。在很多情况下这是非常有用的,Widget<T>但您不在乎的细节T

例如,WCF throws FaultException<T>,其中各种风格T是特定服务的。FaultException<*>如果不简单地捕获基Exception类并使用反射来检查捕获的异常以查看是否有趣,就无法捕获类似的东西T这样可以防止以一般方式处理服务故障。

我认为原因是,具体的泛型类(Widget<int>)并不是Widget<T>其“继承”的泛型类()的真正子类型泛型类仅用作模板来编译新的特定类。

您可以做的一件事就是让您的通用模板(Widget<T>)从非通用基类(Widget继承,并让您的方法返回:

class AbstractWidget { ... }
class Widget<T> : AbstractWidget { ... }
.
.
.
public Widget GetGeneric Widget()
{
   /* flavor determinated at runtime */
}

调用者有责任决定如何使用其Widget。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回泛型类型的泛型方法

来自分类Dev

如何创建泛型方法以返回泛型类型

来自分类Dev

是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

来自分类Dev

是否可以按输入类型重载泛型方法?

来自分类Dev

是否可以从泛型方法返回原始对象?

来自分类Dev

泛型作为方法返回类型

来自分类Dev

方法对象与泛型的返回类型?

来自分类Dev

Java泛型返回类型

来自分类Dev

Java返回类型泛型

来自分类Dev

泛型返回类型 E

来自分类Dev

Java 泛型返回类型

来自分类Dev

针对泛型类型的非泛型属性进行验证

来自分类Dev

是否可以在限制泛型类型的同时扩展泛型类?

来自分类Dev

泛型类型的扩展方法

来自分类Dev

泛型类型与扩展方法

来自分类Dev

与泛型类型方法的接口

来自分类Dev

Java泛型:返回界泛型类型

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

来自分类Dev

可以返回任何类型的 Java 包装泛型类

来自分类Dev

C#泛型并使用类型化方法中的非泛型版本

来自分类Dev

如何在非泛型静态类的多个方法中使用相同的泛型类型

来自分类Dev

使用泛型类型作为异步方法的返回类型

来自分类Dev

如何从泛型方法调用非泛型方法

来自分类Dev

用泛型方法覆盖非泛型方法

来自分类Dev

从非泛型方法调用泛型方法

来自分类Dev

为什么在Java中可以将接口的泛型方法实现为非泛型?

来自分类Dev

是否可以重用某个类的泛型的类型参数

来自分类Dev

是否可以派生递归数据类型的泛型实例?