c# - 参数化返回类型是否需要泛型方法签名?

标签 c# generics methods types emgucv

具体来说,我正在使用 EmguCV's Image type .

我已经定义了一个接口(interface) ITransformation,它带有一个方法 ApplyFrom,它接受一个 Image 并返回一个 Image :

public interface ITransformation
{
    Image<TColor, TDepth> ApplyFrom<TColor, TDepth>(Image<TColor, TDepth> sourceImage);
}

但这对于类型参数来说似乎非常冗长,尤其是在使用该方法时。理想情况下,界面应如下所示:

public interface ITransformation
{
    Image ApplyFrom(Image sourceImage);
}

但 Visual Studio 提示 Image 需要 2 个类型参数。我不想将 ApplyFrom() 方法绑定(bind)到特定的颜色或深度

需要使用上面通用的、冗长的第一个版本吗?

或者我是否遗漏了两个版本之间的一些可能的中间地带?

最佳答案

Do I need to use the generic, verbose first version above?

是的——您需要在引用泛型类型时指定泛型参数。就像你不能引用 List作为一种类型 - 您需要完全限定通用参数( List<T>List<int> 等)

编译器可能能够在使用方法时推断通用参数,但声明必须在您拥有它们的所有三个位置包含通用参数。

关于减少冗长(并仍然保持函数通用)的唯一方法是缩短通用参数名称:

public interface ITransformation
{
    Image<C, D> ApplyFrom<C, D>(Image<C, D> sourceImage);
}

您失去了泛型参数的 self 记录性质,但对编译器来说没有区别。

关于c# - 参数化返回类型是否需要泛型方法签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301127/

相关文章:

c# - 如何确定 Console.Out 是否已重定向到文件?

java - 为什么我会在链表中找到额外的引用对象?

java - JSP 编译失败,因为它使用的是 jdk1.4,尽管我的 jboss 使用的是 jdk 1.6

java - Jackson 中用于数组反序列化的泛型

java - 使用循环在 Java 中绘制等腰三角形

java - 无法调用我的字符串函数

ruby 类未定义方法 (NoMethodError)

c# - 不能包含 Microsoft.Security.Application?

C# Directory.GetFiles 在不同的计算机上返回不同的结果

c# - 使用 CaSTLeWindsor 2.5.1.0 指定要在 ctor 注入(inject)中使用的依赖项