我希望我在文档中错过了这个。有没有办法在C#中声明类型同义词?
答案 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替换类。如果您想全班上课,则由您决定是否要盖章。