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

黄舟
發布: 2017-02-10 15:23:46
原創
1252 人瀏覽過

  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)!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!