在C#中声明类型同义词

时间:2010-10-07 19:12:44

标签: c#

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

6 个答案:

答案 0 :(得分:21)

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

例如,以下内容将为名为System.Int32

MyInt创建别名
using MyInt = System.Int32;

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

创建People

类型List<Person>
public class People: List<Person>
{
}

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

public class SomeStructure : List<Dictionary<string, List<Person>>>
{
}

现在你可以使用类型SomeStructure而不是那种有趣的通用声明。

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

public class MyTuple : Tuple<int, string>
{
  public MyTuple(int i, string s) :
    base(i, s)
  {
  }
}

答案 1 :(得分:17)

也许您正在寻找Using Alias Directives

using MyType = MyNamespace.SomeType;

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

// Constructs a MyNamespace.SomeType instance...
MyType instance = new MyType();

答案 2 :(得分:10)

  

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

没有

您可以使用using来创建别名,但仅限于1个文件(命名空间)。

答案 3 :(得分:3)

听起来你正在谈论一个别名,你可以在你的代码文件顶部的using语句中声明:

using MyDate = System.DateTime;

答案 4 :(得分:0)

这不是解决此问题最直接的方法,但是当我需要类型同义词时,我创建了一个具有与目标类型之间的隐式转换的类,例如:

给定Name需要是string的同义词, 然后,您可以执行以下操作:

$(function () {

        $('form').on('submit', function (e) {

          e.preventDefault();

          $.ajax({
            type: 'post',
            url: 'feed_skill_rating.php',
            data: $('form').serialize(),
            success: function () {
              alert('form was submitted');
            }
          });
        $(this).parent().removeClass("w3-white").css("background-color", "yellow").html("Thank you for the rating. You rated <? echo $fname ?> on a skill.");
        });

});

这将使您能够在代码周围使用Name类型,编译器将允许您从字符串中为其赋值。

如果您有以下方法签名:

public class Name
{
    public string Value;
    public static implicit operator string(Name name) { return name.Value; }
    public static implicit operator Name(string name) { return new Name {Value = name}; }
}

你可以这样做:

public void SomeMethodThatNeedsName(Name name)

答案 5 :(得分:0)

@CountOren很近

sealed public class Name
{
    private readonly string _value;
    private Name(string value) { _value = value; }
    public static implicit operator string(Name name) { return name._value; }
    public static implicit operator Name(string value) { return new Name(value); }
}

用法

Name myName = "John";

某些类型最好作为struct使用,在这种情况下,请删除密封并用struct替换类。如果您想全班上课,则由您决定是否要盖章。