如何将另一个结构隐式转换为我的Type?
因为它是MyClass x = 120;
,是否可以创建这样的自定义类? 如果是这样,我该怎么办?
使用隐式运算符通常被认为是一个坏主意,因为它们毕竟是隐含的并且在您的背后运行。 调试代码乱丢运算符重载是一场噩梦。 那说,有这样的事情:
public class Complex { public int Real { get; set; } public int Imaginary { get; set; } public static implicit operator Complex(int value) { Complex x = new Complex(); x.Real = value; return x; } }
你可以使用:
Complex complex = 10;
或者你可能会超载+运算符
public static Complex operator +(Complex cmp, int value) { Complex x = new Complex(); x.Real = cmp.Real + value; x.Imaginary = cmp.Imaginary; return x; }
并使用代码
complex +=5;
不确定这是否是您想要的,但您可以通过实现隐式运算符来实现: http : //msdn.microsoft.com/en-us/library/z5z9kes2(VS.71).aspx
创建一个隐式运算符:
http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx
例如:
public struct MyStruct // I assume this is what you meant, since you mention struct in your title, but use MyClass in your example. { public MyClass(int i) { val = i; } public int val; // ...other members // User-defined conversion from MyStruct to double public static implicit operator int(MyStruct i) { return i.val; } // User-defined conversion from double to Digit public static implicit operator MyStruct(int i) { return new MyStruct(i); } }
“这是一个好主意吗?” 值得商榷。 隐式转换往往会破坏程序员的公认标准; 一般不是一个好主意。 但是,如果你正在做一些大型价值库,那么它可能是一个好主意。
是的,这是一个简短的例子……
public struct MyCustomInteger { private int val; private bool isDef; public bool HasValue { get { return isDef; } } public int Value { return val; } } private MyCustomInteger() { } private MyCustomInteger(int intVal) { val = intVal; isDef = true; } public static MyCustomInteger Make(int intVal) { return new MyCustomInteger(intVal); } public static NullInt = new MyCustomInteger(); public static explicit operator int (MyCustomInteger val) { if (!HasValue) throw new ArgumentNullEception(); return Value; } public static implicit operator MyCustomInteger (int val) { return new MyCustomInteger(val); } }