今天談及這個話題,是因為在看別人**,遇到的。本著知其然還要知其所以然的精神,在網上大肆查詢了一遍。得到了一些答案。並在此做乙個簡單的筆記,以便自己和他人以後查詢,與我一同成長進步。
在c#中this用來指代當前物件,用於當成員函式中的形參名跟成員變數名一致時,進行區分。
但this不僅僅只有這一作用,this還可以如下這樣用:
class注意到,這個對成員變數i_a的值的鑑定操作在第2跟第4個建構函式中重複了兩次,如果這個操作複雜一點,這樣的變數多一點,那重複**就大大增加,影響了**的維護性,一旦這個操作規則變化了,改動起來就比較麻煩,所以好的方法當然是將這個鑑定操作提取出來,放到乙個單獨的函式中,然後統一呼叫,不過c#還提供了這樣一種機制來,稍作修改如下: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);}}
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 ...