2010-11-25 43 views
86

我最近發現這個代碼:靜態隱運營商

public static implicit operator XElement(XmlBase xmlBase) 
{ 
    return xmlBase.Xml; 
} 

是什麼static implicit operator意思?

回答

159

這是一個conversion operator。這意味着你可以寫下這段代碼:

XmlBase myBase = new XmlBase(); 
XElement myElement = myBase; 

而且編譯器不會抱怨!在運行時,將執行轉換運算符 - 將myBase作爲參數傳遞,並返回有效的XElement作爲結果。

這是一種讓你作爲一個開發者告訴編譯器:

「儘管這些看起來像兩個完全不相關的類型,實際上是從一個到另一個轉換的方式,只是讓我處理如何做到這一點的邏輯。「

8

這樣一個隱式運算符意味着您可以隱式地將XmlBase轉換爲XElement

XmlBase xmlBase = WhatEverGetTheXmlBase(); 
XElement xelement = xmlBase; 
//no explicit convert here like: XElement xelement = (XElement)xmlBase; 
+0

誰能告訴我我的答案有什麼問題嗎? – 2010-11-25 04:44:19

+0

無論如何,這個顯式轉換工作嗎? `XElement xelement =(XElement)xmlBase;`在靜態問題中,它必須是靜態的?它不能是非靜態的,所以它可以被實例化? – aspiring 2013-02-15 10:02:59

2

這是一個隱式轉換操作(而不是顯式操作,這就要求(type)轉換語法)