让我们假设我有下面的类:声明新类型
class Number{
}
我希望再申报Number
类型的变量,并给他们就像int
或uint
或任何类型的变量值:
Number n = 14;
我不知道如果我的问题是好的,但请帮助我,因为我在C#
让我们假设我有下面的类:声明新类型
class Number{
}
我希望再申报Number
类型的变量,并给他们就像int
或uint
或任何类型的变量值:
Number n = 14;
我不知道如果我的问题是好的,但请帮助我,因为我在C#
您可以创建小鬼是新手合法的转换运营商来处理这种情况。您的类需要隐式转换运算符将调用的构造函数。例如:
class Number
{
public int Value { get; set; }
public Number(int initialValue)
{
Value = initialValue;
}
public static implicit operator Number(int initialValue)
{
return new Number(initialValue);
}
}
然后行
Number n = 14;
将得到有效相当于
Number n = new Number(14);
您可以将操作添加到类在另一个方向走得太:
public static implicit operator int(Number number)
{
if (number == null) {
// Or do something else (return 0, -1, whatever makes sense in the
// context of your application).
throw new ArgumentNullException("number");
}
return number.Value;
}
使用隐式运算符时要小心。它们是很好的语法糖,但它们也可能使得难以分辨特定的代码块中究竟发生了什么。您也可以使用显式运算符,这些运算符需要类型转换才能调用。
你想看看implicit创建一个从int到你的数字类的隐式转换。
可以重载在类运营商:
class Number
{
public static Number operator=(int i)
{
...
}
}
BTW,简单和小班这样,最好使用结构,而不是类。
您不能在C#中重载赋值运算符。 – cdhowie
我最初以为是同样的事情,但是你不能重写'='。您必须改用隐式转换。请参阅[可重载操作符]的列表(http://msdn.microsoft.com/zh-cn/library/8edha89s%28v=vs.80%29.aspx) –
几乎正是你想要的 - [如何:在结构之间实现用户定义的转换](http://msdn.microsoft.com/en-us/library/zk2z37d3.aspx) –