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

时间:2011-09-28 02:29:37

标签: c# alias

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

Line<SomeTClass,SomeCClass> myLine =
           (Line<SomeTClass,SomeCClass>)LineFactory.CreateLine(...)

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

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

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

2 个答案:

答案 0 :(得分:5)

不是全球别名。您可以做的是使用类型推断来简化声明:

var myLine = (Line<SomeTClass, SomeCClass>)LineFactory.CreateLine(...);

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

var myLine = LineFactory.CreateLine<Line<SomeTClass, SomeCClass>>(...);

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

var myLine = LineFactory.CreateLine<SomeTClass, SomeCClass>(...);

这最后一个选项在某种程度上对我来说是“正确的”,我无法完全表达出来。如果你需要一点帮助,方法声明就像这样:

public static class LineFactory 
{
    public static Line<T,C> CreateLine<T,C>(...) { ... }
}

答案 1 :(得分:4)

不,您无法创建全局别名。