C#: Globally alias a generic class name?

2020-03-25 05:27发布

in some project we are using Generics, and we get a lot of lines like this:

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

We can declare local alias, with using X = Line<SomeTClass,SomeCClass>.

Then we can write, X myLine = (X)LineFactory.CreateLine(...).

We have a lot a combination of <T,C> but we often use the same. Is it possible de declare the using globally, so that we won't have to declare the alias in each file?

标签: c# alias
2条回答
Deceive 欺骗
2楼-- · 2020-03-25 06:17

No, you cannot create a global alias.

查看更多
疯言疯语
3楼-- · 2020-03-25 06:21

No such thing as a global alias. What you can do is use type inference to simplify your declarations:

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

and if that's not specific enough for the inference system, you can make the CreateLine() method generic to enforce it:

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

and given the name of the LineFactory type, maybe even simplify it some more:

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

This last option feels "right" to me in some way I can't fully articulate. Just in case you need a little help, the method declaration would look like something this:

public static class LineFactory 
{
    public static Line<T,C> CreateLine<T,C>(...) { ... }
}
查看更多
登录 后发表回答