記c 中建構函式中this的用法

2022-02-06 06:58:09 字數 2098 閱讀 1656

今天談及這個話題,是因為在看別人**,遇到的。本著知其然還要知其所以然的精神,在網上大肆查詢了一遍。得到了一些答案。並在此做乙個簡單的筆記,以便自己和他人以後查詢,與我一同成長進步。

在c#中this用來指代當前物件,用於當成員函式中的形參名跟成員變數名一致時,進行區分。

但this不僅僅只有這一作用,this還可以如下這樣用:

class

class1

public class1(int

i_a)

s_a = "

defalt";

}public class1(string

s_a)

public class1(int i_a, string

s_a)

this.s_a =s_a;

}public

void

print()

", i_a);

console.writeline(

"s_a =

", s_a);}}

注意到,這個對成員變數i_a的值的鑑定操作在第2跟第4個建構函式中重複了兩次,如果這個操作複雜一點,這樣的變數多一點,那重複**就大大增加,影響了**的維護性,一旦這個操作規則變化了,改動起來就比較麻煩,所以好的方法當然是將這個鑑定操作提取出來,放到乙個單獨的函式中,然後統一呼叫,不過c#還提供了這樣一種機制來,稍作修改如下:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

namespace

liustream

public class1(int i_a) : this(3, "

default")

public class1(string s_a) : this(6

, s_a)

public class1(int i_a, string

s_a)

this.s_a =s_a;

}public

void

print()

", i_a);

console.writeline(

"s_a =

", s_a);}}

}

呼叫:

class1 cl = new class1("

我是test");

cl.print();

class1 c2 = new class1(8

); c2.print();

console.writeline(

"結束了

");

輸出結果:

另外,this還可以用在索引器中。

另外的一種解釋說法:

首先,c#   裡的   this   代表正在執行的當前例項,也就是這個類的乙個例項(只不過系統是自己生成,不用我們顯式宣告和初始化) 

第二,   c#類中的預設建構函式(也就是無形參,無實現體的)在**中是可以預設的,我們可以不用**寫出來。(如果預設,程式在編譯的時候,系統會為我們加上這個建構函式) 

第三,對建構函式   func(para):this()來說   ,表示的是func建構函式可以呼叫   this()函式裡的**,而this()就是func的無行參的過載函式。   必須這樣寫,而不能寫成func(para):func() 

最後,我們可以知道 

public   issuesubject(icontainer   container)   :   this() 

表示的是   issusubject(container)   呼叫自己類中的另乙個函式中的**(而這個函式this()就是此類中的預設建構函式   issuesubject()   ), 

而恰好,這個預設建構函式   public   issuesubject()      沒有顯式寫出來

擴充套件知識

base(c# 參考)

參考:

C 中的建構函式

在我們學習c 的過程中,我們難免會遇到類,在類中有6個預設的函式,它們分別為 建構函式 拷貝建構函式 析構函式 賦值操作符過載 取位址操作符過載和const修飾的取位址操作符過載,那麼我今天直介紹其中的建構函式。1 什麼是建構函式?建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編...

C 中的建構函式

什麼是建構函式?建構函式是類的成員函式,用於初始化類的物件。在c 中,建立物件 類的例項 時會自動呼叫constructor。它是該類的特殊成員函式。建構函式與普通成員函式有何不同?建構函式與普通函式在以下方面有所不同 用乙個真實的例子來了解c 中建構函式的型別。假設您去商店買了乙個記號筆。當您想購...

C 中的建構函式

1,c 中類的真正形態是通過 class 這個關鍵字來定義的 2,物件中成員變數的初始值是多少?1,通過下面的小實驗來說明問題 3,小實驗 1,下面的類定義中成員變數 i 和 j 的初始值是什麼?1 include 2 3class test410 int getj 11 1213 test gt ...