1、什麼是建構函式? 有哪些建構函式? 各個建構函式的定義、實現方法、注意事項?
所謂建構函式,就是一個方法,這個方法可以初始化對象,即運行完這個函數後,記憶體總開闢了一塊該類的對象的空間。有三種:正常的建構函式,也就是執行個體化建構函式;私人建構函式;靜態建構函式。
執行個體化構造器:
public class Example { private string property1 = string.Empty; private string property2 = @"hello"; private int property3 = 0; public Example()//成員都是聲明時的初始值,這種預設的構造器,也可以不寫。 { } public Example(string p1, string p2, int p3)//傳入的值初始化 { this.property1 = p1; this.property2 = p2; this.property3 = p3; } }
私人構造器:
私人構造器,外部是不能訪問的,那麼如何執行個體化呢,參見單例模式,這裡就是用了私人建構函式:
http://www.php.cn/
靜態建構函式:
先看例子:
public class StaticConstruct { static StaticConstruct() { Console.WriteLine(@"靜態建構函式"); } public StaticConstruct() { Console.WriteLine(@"執行個體化建構函式"); } public StaticConstruct(string flage) { Console.WriteLine(@"帶參建構函式"); } } class Program { static void Main(string[] args) { StaticConstruct strc = new StaticConstruct(); StaticConstruct strcValue = new StaticConstruct(string.Empty); Console.ReadLine(); } }
結果:
靜態建構函式特點:靜態建構函式中不允許出現存取修飾詞;執行個體化的時候,首先自動調用靜態建構函式,意即調用靜態建構函式是不可控的;靜態建構函式是無參的,並且一個類中只有一個;不能被繼承。
2、This關鍵字和Base關鍵字用途? 實現代碼?
(1)、this關鍵字:
this顧名思義,就是指本類中的意思,引用當前類的成員。當然如果程式在運行中,則可以精確地說,this指當前類的對象的成員,作用就是用來區分對象的。因為一個類可以有N個對象。不過在static類中不能使用this關鍵字,究其原因,無非是static不可能執行個體化多個對象,它只有一個,自然沒必要去用this來區分對象了。一般常用如下:
a、方法或建構函式中,同名變數。
public class MyTestA { private string testA = string.Empty; public MyTestA(string testA) { this.testA = testA; } public void Handler(string testA) { this.testA = testA; } }
b、get,set方法
public class MyTestB { private string testB = string.Empty; public string TestB { get { return this.testB; } set { this.testB = value; } } }
c、將執行個體傳遞
比如,事件中
public class MyTestC { public event EventHandler OnTestCEvent = null; private void Send_OntestEvent(object sender,EventArgs e) { if (OnTestCEvent != null) { OnTestCEvent(sender, e); } } private void TestEvent() { Send_OntestEvent(this, null); } } public class MyTestD { MyTestC testC = new MyTestC(); public event EventHandler OnTestDEvent = null; private void Send_OnTestDEvent(object sender, EventArgs e) { if (OnTestDEvent != null) { OnTestDEvent(sender, e); } } public MyTestD() { testC.OnTestCEvent += new EventHandler(testC_OnTestEvent); } void testC_OnTestEvent(object sender, EventArgs e) { Send_OnTestDEvent(sender, e); } } public class MyTestE { MyTestD testD = new MyTestD(); public MyTestE() { this.testD.OnTestDEvent += new EventHandler(testD_OnTestDEvent); } void testD_OnTestDEvent(object sender, EventArgs e) { MyTestC testC = sender as MyTestC;//通過MytestD將對象轉了過來 if (testC != null) { //代碼 } } }
(2)base關鍵字:
一般用於,子類訪問父類。
一種是,重寫父類方法時,
public class ParentClass { public virtual void MethodA() { Console.WriteLine(@"基類的方法"); } } public class ChildClass : ParentClass { public override void MethodA() { base.MethodA(); Console.WriteLine("衍生類別方法"); } }
另一種,子類調用父類建構函式,
public class ParentClass { public ParentClass(string flage) { Console.WriteLine(@"基類建構函式"); } public virtual void MethodA() { Console.WriteLine(@"基類的方法"); } } public class ChildClass : ParentClass { public ChildClass(string flage) : base(flage) { } public override void MethodA() { base.MethodA(); Console.WriteLine("衍生類別方法"); } }
3、什麼是反射? 如何?反射? 反射有何優缺點? 何時使用反射?
http://blog.csdn.net/yysyangyangyangshan/article/details/7028589
以上就是C#基礎知識整理:C#類和結構(2)的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!