[英]why i need partial class and virtual method in c#?
我有一個問題,為什么C#中有partial
類和virtual
方法?
我的意思是,當我擁有一個普通或抽象類,然后從其繼承或局部化時,有什么區別?
另一個問題是為什么我需要虛擬方法? 當我從一個類繼承時,如果需要的話,我也可以覆蓋該方法。
局部類:它們大部分用於在編譯時將機器生成的代碼與手動生成的代碼組合在一起,以避免濫用繼承等。它可用於其他原因,但這是它們的主要目的。 不再有帶有“請勿編輯此位-它屬於設計器”等內容的源文件。
虛方法:不,如果沒有在基類中將其聲明為虛(或抽象)成員,則不能覆蓋該成員。 你可以用它的影子 new
,但是這並不等同於覆蓋它-新的方法不會被多態調用。
部分類和方法使您可以將代碼分布在不同的文件中。 當您使用代碼生成時,這很有用-生成的代碼在一個文件中,可以毫無問題地覆蓋,其余代碼可以安全地更改。
至於virtual
-在C#中,如果要覆蓋一個方法,你必須使用virtual
(或abstract
基類),並override
在覆蓋類。 沒有它們,您不能簡單地覆蓋。
如果您不使用virtual
/ abstract
並進行override
,則可能會隱藏/遮蔽某個方法,這可能是您想要的,也可能不是。 使用virtual
/ abstract
和override
使事情變得明確和可預測。
virtual
方法時,才可以覆蓋該方法。 如果基類的方法不是virtual
並且您在子類中創建了一個具有相同名稱的方法,則您已經創建了一個全新的,不相關的方法。 局部類使您可以在多個文件中拆分類定義。
可以使用關鍵字override覆蓋虛擬方法。 如果該方法未定義為虛擬方法,則只能使用new關鍵字將其隱藏在子類中。
我想您可以在任何C#101資料中閱讀所有這些內容。 只需看一下MSDN庫。
局部類讓您在多個聲明中定義相同的類,這些聲明也大多位於不同的文件中。 喜歡:
public partial class MyClass{
public void MethodOne(){}
}
public partial class MyClass{
public void MethodTwo(){}
}
如果基類的子類具有重寫該方法的能力,則可以使用虛擬方法。 如果您的子類必須覆蓋該方法,請使用abstract。 所以,
public class MyBaseClass{
public virtual void MethodOne(){} // CAN be overridden...
public abstract void MethodTwo(){} // MUST be overridden.
}
局部類對於將單個類划分為同一項目中的多個文件很有用。 這對於為您生成代碼的工具(例如Windows窗體或WPF)非常有用。 例如,部分類允許您將代碼編寫到一個文件中,而讓IDE將他的代碼編寫到另一個文件中。
關於虛擬和替代,請看另一線程: 為什么要使用虛擬和替代?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.