base與this關鍵字用法小結

2021-08-21 19:15:54 字數 3898 閱讀 8376

1.base關鍵字

在博文《c#類繼承中建構函式的用法小結》一文中,我們已經學習到:使用base關鍵字可以幫助子類顯示地呼叫父類的建構函式。對於這點,我們可以使用前文所給的例項**(有裁剪)來進行說明,具體**如下:

//父親類public class fatherclasspublic fatherclass(string from))", from);

}

}

//小霸王類,我是小霸王,腰裡別只雞

public class meclass : fatherclass

public meclass(string from)

: base(from)

)", from);

}

}

static void main(string args)

執行程式,結果如下:

**分析:

**中定義了子類meclass 及父類fatherclass,子類和父類均包含兩個建構函式:乙個無參建構函式和乙個有參建構函式。在對子類meclass 進行例項化時,會呼叫該類的有參建構函式,該建構函式的宣告中包含了「: base(from)」,這將告訴編譯器子類需要顯式地去呼叫父類的有參建構函式。

那麼我們去掉「: base(from)」,結果又會怎樣呢?

去掉「: base(from)」,再次執行程式,結果如下:

很顯然,在子類被例項化時,呼叫的是父類的無參建構函式。這是編譯器的自作主張而已,也就是說,子類若不顯式的呼叫父類的建構函式時,編譯器會自動呼叫父類的無參建構函式。這些,在文章《c#類繼承中建構函式用法小結 》有詳細說明,有不解之處,可以去查閱。

除了這點,那麼base關鍵字還有其他什麼用處嗎?

答案是肯定的。使用base關鍵字可以幫助子類呼叫基類上已被其他方法重寫的方法。

對於這點,我們給出下面的例項**:

//父親類public class fatherclass//:grandfatherclass", st***ther);}}

//小霸王類,我是小霸王,腰裡別只雞

public class meclass : fatherclass

", strme);

}

}

static void main(string args)

**執行結果為:

**分析:

**中,父類定義了虛方法showinfo,用來輸出字串"i'm your father,gay!",子類重寫了父類方法showinfo,用來輸出字串"i'm your son,gay!",在子類例項化後,呼叫方法showinfo,輸出了字串"i'm your son,gay!"。這時,你發現,父類的方法showinfo不再被使用了。那麼我們要是想在子類中使用父類的這個被重寫方法,又該怎麼辦呢?(哥們,還在故弄玄虛啊)很明顯使用base關鍵字了。我們稍稍修改**,如下:

//小霸王類,我是小霸王,腰裡別只雞public class meclass : fatherclass", strme);}public void showfatherinfo()

}

static void main(string args)

父親類**不做任何修改。

上面的**在前面**的基礎上,為子類增加了方法showfatherinfo,在該方法中使用**「base.showinfo();」來顯式呼叫父類被重寫的方法showinfo來輸出字串"i'm your father,gay!",接著對子類進行例項化並呼叫新方法showfatherinfo,這次終於輸出了字串"i'm your father,gay!",不信,那就看結果。

呵呵,兒子終於變成了老子,老子信了你的邪。(博主看龍門,看出毛病來了,請見諒)

到這裡,base關鍵字的主要作用,已基本講完。

最後,補充一點,那就是:從靜態方法中使用 base 關鍵字是錯誤的。(msdn)

對於這點,就不舉例說明了,下面展開this關鍵字的介紹。

2.this關鍵字

this關鍵字的第乙個作用為:限定被相似的名稱隱藏的成員(msdn)。

//小霸王類,我是小霸王,腰裡別只雞public class meclass}在例項**中,類的私有成員變數name與類成員方法的入參名稱相同,所以,在函式體中,類的私有成員變數name被入參name隱藏,要想在函式體中使用該私有成員變數,需要使用this關鍵字來指定,「this.name」的作用就是告訴編譯器,此處的name為類的私有成員變數而不是函式的入參name。

this關鍵字的第二個作用為:將物件作為引數傳遞到其他方法(msdn)。

public class classhelper}

//小霸王類,我是小霸王,腰裡別只雞public class meclass : fatherclass}例項**中,meclass得建構函式中對類classhelper 進行例項化,傳入引數為this,此處的this代表meclass物件。這裡所取例項並沒有任何價值,甚至有點牽強,但是能說明問題就好。

this關鍵字的第三個作用為:宣告索引器(msdn)。

this關鍵字的第三個作用為:可用作擴充套件方法的第乙個引數的修飾符(msdn)。

1.c#擴充套件方法初探

2.擴充套件方法入門

3.c#擴充套件方法呼叫簡析

4.c# linq擴充套件方法應用

最後,還是需要補充一點,那就是:由於靜態成員函式存在於類一級,並且不是物件的一部分,因此沒有 this 指標。在靜態方法中引用 this 是錯誤的。(msdn)

base關鍵字 this關鍵字

用於在派生類中實現對基類公有或者受保護成員的訪問,但是只侷限在建構函式 例項方法和例項屬性訪問器中。功能主要包括 1 呼叫基類上已被其他方法重寫的方法。2 指定建立派生類例項時應呼叫的基類建構函式。base常用於,在派生類物件初始化時和基類進行通訊。base可以訪問基類的公有成員和受保護成員,私有成...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

base 關鍵字 類

通過base 關鍵字訪問基類的成員 呼叫基類上已被其他方法重寫的方法。指定建立派生類例項時應呼叫的基類建構函式。基類訪問只能在建構函式 例項方法或例項屬性訪問器中進行。從靜態方法中使用 base 關鍵字是錯誤的。例項 using system public class parent string p...