2010-09-09 42 views
1

剛開始學習C#(在XAML),所以欣賞一些闡述:xaml.cs中的2個括號是什麼意思?

((MSAvalon.Windows.Serialization.ILoaded)(_Text_2_)).DeferLoad(); 

不知道什麼都圓括號表示...意思「_Text_2_」是對象「MSAvalon.Windows的孩子。 Serialization.ILoaded「?

如果是的話......爲什麼不一樣的東西:

MSAvalon.Windows.Serialization.ILoaded._Text_2.DeferLoad(); 
+2

()是括號,[]是括號,{}是大括號。 – 2010-09-09 12:58:48

+0

進一步我的括號的理解...如何< >括號工作在C#中?什麼是我應該搜索以瞭解的術語< >有時用於聲明新對象時 – bcm 2010-09-09 13:00:33

+1

< >被稱爲尖括號。它們的含義取決於上下文。它們可以被解釋爲不平等的操作符,或者作爲泛型聲明的一部分。對我來說聽起來像是對C#的介紹是必要的......快速的Google搜索會產生很多資源。 – 2010-09-09 13:06:15

回答

2

這是一個類型轉換,用於告訴編譯器,當變量不明顯時,變量是特定類型的。它可能已被使用這樣的:

class Foo { 
    private object _Text_2_; 

    void Method() { 
     ((MSAvalon.Windows.Serialization.ILoaded)_Text_2_).DeferLoad(); 
    } 
} 

離開了這裏類型轉換會導致編譯器錯誤,因爲DeferLoad不是object的方法。你在這裏告訴編譯器,你有一些特殊的知識,_Text_2_真的是你說的。

3

_Text_2_澆鑄爲MSAvalon.Windows.Serialization.ILoaded對象/界面,然後在方法DeferLoad被稱爲

+0

這個工作也會嗎? **(CastType)_Text_2_.DeferLoad()** – bcm 2010-09-09 12:50:59

+1

不,但這會:[((CastType)_Text_2 _)。DeferLoad();]如果您以其他方式執行此操作,則您將投影DeferLoad()這可能不是你想要的。 – twon33 2010-09-09 12:53:00

+0

好點twon33 – bcm 2010-09-09 12:54:10

0

基本上它的開始((讓DeferLoad可以被調用。我將用一個例子來說明。

比方說,你做到以下幾點。

object s = "Hello world"; 

小號現在包含一個字符串。如果你想這個字符串大寫使用強制(在你的榜樣,我不能簡單地寫這個

(string)s.ToUpper(); 

ToUpper的()不能被調用,因爲它不是類型OB的變量有效JECT。如果您將其重寫爲

((string)s).ToUpper() 

它是有效的。由於括號,s首先被轉換爲字符串,然後在變量上調用string.ToUpper()。

請注意,在這種情況下,(s as string).ToUpper()將是一個更清潔的方法。

+2

爲什麼'(s as string).ToUpper()'是一種更乾淨的方法?如果s不是一個字符串,你將得到一個NullReferenceException而不是InvalidCastException。我不認爲這是更清潔。 – PetPaulsen 2010-09-09 12:58:36

+0

更清潔,因爲我認爲代碼更具可讀性,因爲刪除了一層括號。爲了避免這種異常,你可以使用s.ToString()。ToUpper(),但是如果你只是想要這樣做,如果s實際上是一個字符串,你可以這樣做: string str = s as string;如果(str!= null){(s爲字符串).ToUpper(); } – 2010-09-09 13:08:39

+0

這段代碼在我保存後看到的評論中看起來不太好,但是你得到了我希望的觀點:) – 2010-09-09 13:10:15

相關問題