C#:全局别名是通用类名吗?

Fra*_*ois 3 c# alias

在某些项目中我们使用Generics,我们得到了很多这样的行:

Line<SomeTClass,SomeCClass> myLine =
           (Line<SomeTClass,SomeCClass>)LineFactory.CreateLine(...)
Run Code Online (Sandbox Code Playgroud)

我们可以声明本地别名using X = Line<SomeTClass,SomeCClass>.

然后我们可以写,X myLine = (X)LineFactory.CreateLine(...).

我们有很多组合,<T,C>但我们经常使用相同的.是否可以全局声明使用,以便我们不必在每个文件中声明别名?

小智 5

不,您不能创建全局别名。


Joe*_*orn 5

没有全球化的别名.你可以做的是使用类型推断来简化你的声明:

var myLine = (Line<SomeTClass, SomeCClass>)LineFactory.CreateLine(...);
Run Code Online (Sandbox Code Playgroud)

如果这对于推理系统来说不够具体,可以使CreateLine()方法通用以强制执行它:

var myLine = LineFactory.CreateLine<Line<SomeTClass, SomeCClass>>(...);
Run Code Online (Sandbox Code Playgroud)

并给出LineFactory类型的名称,甚至可以简化它:

var myLine = LineFactory.CreateLine<SomeTClass, SomeCClass>(...);
Run Code Online (Sandbox Code Playgroud)

这最后一个选项在某种程度上对我来说是"正确的",我无法完全表达出来.为了防止你需要一些帮助,方法声明看起来像这样:

public static class LineFactory 
{
    public static Line<T,C> CreateLine<T,C>(...) { ... }
}
Run Code Online (Sandbox Code Playgroud)