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)的內容,更多相關內容請關注中文PHP網(www.php.cn)!