在C#中声明类型同义词

ako*_*nsu 26 c#

我希望我在文档中错过了这个.有没有办法在C#中声明一个类型同义词?

Chr*_*lor 22

您可以使用using语句为类型创建别名.

例如,以下内容将为System.Int32被调用创建别名MyInt

using MyInt = System.Int32;
Run Code Online (Sandbox Code Playgroud)

或者,您可以在某些情况下使用继承来提供帮助.例如

创建型People这是一种List<Person>

public class People: List<Person>
{
}
Run Code Online (Sandbox Code Playgroud)

不是别名,但它确实简化了事情,特别是对于像这样的更复杂的类型

public class SomeStructure : List<Dictionary<string, List<Person>>>
{
}
Run Code Online (Sandbox Code Playgroud)

现在你可以使用类型SomeStructure而不是那个有趣的泛型声明.

对于您在评论中的示例,Tuple您可以执行以下操作.

public class MyTuple : Tuple<int, string>
{
  public MyTuple(int i, string s) :
    base(i, s)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 所以,答案是肯定的,至少不像Haskell那样.`using`将同义词作为本地文件的范围,并且您不能为同一类型定义两个不同的同义词.除了_evil_本身之外,继承不适用于像String这样的密封类,它们通常是我们对创建同义词感兴趣的类型."创建"同义词的另一种方法是封装或适配器.创建一个`MyTuple`类,其中隐藏了一个`Tuple`实例,并将所有调用转发给它(当然你必须实现封装类型的所有接口). (3认同)

Ree*_*sey 17

也许您正在寻找使用别名指令:

using MyType = MyNamespace.SomeType;
Run Code Online (Sandbox Code Playgroud)

这使您可以在代码中键入:

// Constructs a MyNamespace.SomeType instance...
MyType instance = new MyType();
Run Code Online (Sandbox Code Playgroud)


Hen*_*man 9

有没有办法在c#中声明一个类型同义词?

没有.

您可以使用但不限于1文件(命名空间)创建别名.