因爲它是MyClass x = 120;
,有可能創建這樣的自定義類嗎? 如果是這樣,我該怎麼做?如何隱式地將另一個結構轉換爲我的類型?
3
A
回答
4
它通常被認爲是一個壞主意,用含蓄的運營商,因爲他們畢竟是隱式和你背後運行。調試運算符重載的代碼是一場噩夢。也就是說,像這樣的東西:
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;
4
不知道這是否是你想要的,但你可以通過實現隱運營商那裏: http://msdn.microsoft.com/en-us/library/z5z9kes2(VS.71).aspx
3
創建一個隱含的操作:
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);
}
}
「這是個好主意嗎?」是有爭議的。隱式轉換傾向於打破程序員接受的標準;一般不是一個好主意。但是,如果你正在做一個大型的價值圖書館,那麼它可能是一個好主意。
1
是的,這裏有一個簡單的例子...
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); }
}
相關問題
- 1. 我該如何隱式地將我的類轉換爲另一種類型?
- 2. 不能隱式地將類型轉換爲另一個類C#
- 3. 不能隱式地從一個類轉換爲另一個類
- 4. 無法將Weblogic結構類型轉換爲Oracle結構類型
- 5. 使用xslt將xml結構轉換爲另一個xml結構
- 6. 將未知類型轉換爲另一個類型的泛型
- 7. Enum.Parse不能隱式地將類型'對象'轉換爲存在顯式轉換(你缺少一個轉換嗎?)
- 8. 將一種類型的樹結構轉換爲另一種類型的設計模式?
- 9. 如何從另一個類似類型結構memcpy結構
- 10. Neo4j:spring-data-neo4j,如何將結果轉換爲我的類型類?
- 11. 如何將綁定值類型轉換爲另一個aspx?
- 12. C++構造隱式類型轉換
- 13. 不能隱式地將類型bool轉換爲字符串
- 14. 不能隱式地將類型'AppName.MyListItem'轉換爲'AppName.MySecundPage.MyListItem'?
- 15. 不能隱式地將類型'int'轉換爲LittleEndian ByteOrder
- 16. Webservices:不能隱式地將類型'System.Xml.Linq.XElement'轉換爲'System.Xml.XmlElement'
- 17. 不能隱式地將類型'字符串'轉換爲'namespace.class'
- 18. 不能隱式地將類型'void'轉換爲'object'asp.net.MVC
- 19. 不能隱式地將類型'float'轉換爲'Microsoft.Xna.Framework.Rectangle'
- 20. 不能隱式地將類型'字符串'轉換爲'System.Web.UI.WebControls.Unit'
- 21. 不能隱式地將類型'System.Collections.ArrayList'轉換爲'BookReservationRQReservation []
- 22. C#,不能隱式地將`long'類型轉換爲`uint'
- 23. 」不能隱式地將類型'double'轉換爲'byte'「
- 24. LINQ不能隱式地將類型Generic.ICollection轉換爲Generic.List
- 25. 不能隱式地將類型'字符串'轉換爲'int'(c#)
- 26. 不能隱式地將類型'System.Web.Mvc.SelectList'轉換爲'System.Collections.Generic.ICollection <System.Web.Mvc.SelectList>'
- 27. 錯誤:不能隱式地將類型'MyBlock.BlockClass'轉換爲'System.Web.Mvc.ActionResult'
- 28. 不能隱式地將類型'Microsoft.SolverFoundation.Services.Term'轉換爲'bool'
- 29. 不能隱式地將類型'System.Linq.IQueryable'轉換爲'System.Collections.Generic.List
- 30. 不能隱式地將類型'system.timespan'轉換爲雙倍
老實說,我已經閱讀MSDN的impicit操作符,但由於某些錯誤,我無法實現它。現在我測試它的代碼,它的工作原理。謝謝 – Freshblood 2010-06-10 16:24:24
我很高興我的幫助。 – SWeko 2010-06-10 17:22:51