2011-10-26 43 views
1

我有一個問題,爲什麼在c#中有一個partial類和一個virtual方法?爲什麼我需要c#中的部分類和虛擬方法?

我的意思是什麼是當我有一個正常或抽象類,然後從它繼承或使其部分的區別?

另一個問題是爲什麼我需要虛擬方法?當我從一個類繼承我也可以重寫該方法,如果我想。

+3

這是兩個不同的問題。 –

+2

「當我繼承一個類時,如果需要,我可以重寫該方法。」 *只有*如果該方法被標記爲「虛擬」。否則你不能。 – dlev

+1

兩種不同的,最有可能是重複的。 – Centro

回答

8

部分類:它們主要是允許機器生成的代碼在編譯時與手動生成的代碼結合使用,以避免濫用繼承等。它可以用於其他原因,但這是主要目的他們。沒有更多的源文件,「不要編輯這一點 - 它屬於設計師」等

虛擬方法:不,你不能重寫一個成員,如果它沒有聲明虛擬(或抽象)在基類。你可以影子它與new,但這是不是重寫它相同 - 新的方法將不會被稱爲多態。

+0

或抽象基類中的抽象 – sll

+0

@sll:謝謝,修正。 –

5

部分類和方法允許您跨不同文件傳播代碼。當您使用代碼生成時,這非常有用 - 生成的代碼位於一個可以無問題地覆蓋的文件中,其餘代碼可以安全地更改。

至於virtual - 在C#中,如果要覆蓋一個方法,你必須使用virtual(或abstract)在基類和壓倒一切的類override。沒有它們,你不能簡單地重寫。

如果不使用virtual/abstractoverride你是在hiding/shadowing的方法,這可能會或可能不是你想要的是危險。使用virtual/abstractoverride使事情變得明確和可預測。

1
  1. 部分類允許您跨多個文件拆分類定義,這在某些情況下很實用。
  2. 否;如果在基類中標記爲virtual,則只能覆蓋該方法。如果基類的方法不是virtual,並且在子類中創建了一個名稱相同的方法,那麼您創建了一個全新的,不相關的方法。
0

分部類讓我們定義多個聲明中的同一個類,它們大多在不同的文件中。如:

public partial class MyClass{ 
    public void MethodOne(){} 
} 

public partial class MyClass{ 
    public void MethodTwo(){} 
} 

如果基類的子類有能力重寫該方法,則可以使用虛方法。如果你的子類必須重寫該方法,則使用抽象。所以,

public class MyBaseClass{ 
    public virtual void MethodOne(){} // CAN be overridden... 

    public abstract void MethodTwo(){} // MUST be overridden. 
} 
0

部分類允許您跨多個文件拆分類定義。

使用關鍵字覆蓋可以覆蓋虛擬方法。如果方法沒有被定義爲虛擬的,你只能使用new關鍵字將它隱藏在子類中。

我想你可以在任何C#101素材中閱讀所有這些。 Just take a look at the MSDN library.

0

部分類可用於在同一個項目中將多個文件中的單個類劃分。 這對於爲您生成代碼的工具非常有用,例如Windows窗體或WPF。 例如,部分類允許您將代碼寫入一個文件,並讓IDE將其代碼寫入另一個文件中。

關於虛擬和覆蓋,看看這個其他線程:Why do we use virtual and override?

相關問題