我經常在我的公司里發現這樣的代碼......
class Base
{
public int Property
{
get; set;
}
}
class Derived : Base
{
public Derived()
{
base.Property = 0xAFFE。
}
而且,我經常爭辯說,這種對base的使用是 "錯誤的"。
我認為,"this.Property "將是 "正確的"(或者簡單地說是 "Property = 0xAFFE;")
我認為,我們可以進行重構(使 Property 成為虛擬的,覆寫它)。但是,我的論點似乎并不令人信服。你能提供一些論據嗎?還是我(完全)錯了?
謝謝。
謝謝你。
uj5u.com熱心網友回復:
我認為,如果你的例子中的Property不是virtual,那么你使用base或this并不重要。
如果它是virtual,并且在繼承類中被重寫,你將會有不同的行為。
我個人傾向于在設定這樣的屬性時不使用base或this(這將等同于指定this)。 只有在特殊情況下(如覆寫一個虛擬方法并呼叫基本實作),我才會使用這些關鍵字
uj5u.com熱心網友回復:
所以,我們至少有3種方法可以說是相同的:
Property = 0xAFFE。
this.Property = 0xAFFE;
base.Property = 0xAFFE;
和往常一樣,有一些小的方面可以決定這一行是正確的還是錯誤的。
第一個版本是最寬松的。屬性可以是一個真實的屬性,也可以是一個在上面宣告的變數,或者是一個從外部范圍傳遞過來的引數。此外,在某些情況下,你可以寫Property = Property,而編譯器會足夠聰明地理解你(反正是不好的做法)。
第二個版本做了一個假設。屬性是類的所屬物。句號。盡管一些代碼分析器會給出 "語法可以簡化 "的提示,但這是一種正常的做事方式。
第三種意圖是一個更嚴格的假設。屬性是來自祖先的祝福。因此,即使你在本地覆寫它,該語法也能100%地保證你的變化被應用于祖先欄位。
說實話,在大多數情況下,最后兩種語法形式是可以互換的。你真的認為執行你的語法有什么意義嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333680.html
標籤:
