2011-03-14 66 views
3

我試過用google搜索這個,也用這個網站上的搜索功能,但是我找到的答案都沒有回答我的問題。什麼是vb.net CType的c-sharp等價物?

在VB中,如果想要一個簡單的方法來從我的一個類轉換到另一個自定義類,我可以定義CType運算符來定義如何從一個類轉換到另一個類。然後我可以打電話CType(fromObject, toNewType)做轉換或在C#我想你可以做一個簡單的演員。但是,在c#中,如何定義實際的演員表將如何從一個自定義類到另一個自定義類進行處理(就像你可以在vb中使用CType運算符一樣)。

+0

@kangkan我看你改變了我的標題的東西更具體的感謝。然而,我花了40分鐘搜索這個地方,並且沒有看到csharp impliciit/explicit操作符的引用。 – jonchicoine 2011-03-14 05:21:03

回答

9

可以使用explicit關鍵字定義自定義轉換:

public static explicit operator TargetClass(SourceClass sc) 
{ 
    return new TargetClass(...) 
} 

...但考慮不這樣做。這會讓那些不得不維護你的軟件的人混淆。相反,只是定義構造你的目標類,把你的源類的實例作爲參數:

public TargetClass(SourceClass sc) 
{ 
    // your conversions 
} 
+0

+1,因爲這是將一個對象轉換爲另一個對象的有效方法。但是,我不明白如何使用隱式或顯式操作符會使維護人員感到困惑。你能詳細說明一下嗎? – 2011-03-14 05:06:42

+1

@Jim:開發人員不會期望在所有情況下的投射次數超過99.99%,特別是對於參考類型投射。它們當然不會處理除ClassCastException之外的任何異常。最少突擊的原則。 – 2011-03-14 05:08:14

+1

@邁克爾,我想我明白你的觀點。對我而言,從「Square」到「Rectangle」或「Celsius」到「Fahrenheit」是很有意義的,但是從一個對象投射到不同的對象是沒有意義的。 – 2011-03-14 05:12:12

1

你想要做什麼是對一類重載Cast operators

+0

+1。雖然,我認爲「隱式」操作符可能是危險的。 – 2011-03-14 05:14:23

2

我認爲你從MSDN希望explicit operator

例子:

// Must be defined inside a class called Farenheit: 
public static explicit operator Celsius(Fahrenheit f) 
{ 
    return new Celsius((5.0f/9.0f) * (f.degrees - 32)); 
} 

Fahrenheit f = new Fahrenheit(100.0f);  
Console.Write("{0} fahrenheit", f.Degrees);  
Celsius c = (Celsius)f; 
0

如果您還沒有轉換任何特定代碼,System.Convert方法在VB最接近CType。否則,它可以像一些例子來看待:

VB.Net

Dim btn As Button = CType(obj,Button) 

C#等效:

Button btn = (Button)objButton btn = obj as Button