C#基礎知識整理:C#類和結構(2)

來源:互聯網
上載者:User
   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)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.