C# base和this的用法

/*
* this關鍵字
* this關鍵字引用類的當前實例
* 注意:靜態成員方法中不能使用this關鍵字,this關鍵字只能在實例構造函數、實例方法或實例訪問器中使用
*/ide


/*
* base關鍵字
* base關鍵字用於從派生類中訪問基類的成員;
* 指定建立派生類實例時調用基類構造函數;
* 調用基類上已被重寫的方法
* 注意:不能從靜態方法中使用base關鍵字,base關鍵字只能在實例構造函數、實例方法或實例訪問器中使用
*/函數

base用法
一、base調用構造方法this

       public class BaseClass
        {
            public BaseClass()
            {
                Console.WriteLine("調用基類--無參數的構造函數");
            }

            public BaseClass(string name)
            {
                Console.WriteLine("調用基類--有參數的構造函數");
            }
        }

        public class DerivedClass:BaseClass
        {
            public DerivedClass()
                : base()
            {

            }
            public DerivedClass(string name)
                : base(name)
            {

            }

            static void Main()
            {
                DerivedClass a = new DerivedClass();//調用基類--無參數的構造函數
                DerivedClass b = new DerivedClass("Andy");//調用基類--有參數的構造函數
                Console.ReadLine();
            }
        }

二、base在派生類中調用基類的方法spa

        public class BaseClass
        {
           public virtual void GetInfo()
           {
                 Console.WriteLine("Andy.");
           }
        }

        public class DerivedClass :BaseClass
        {
            
            public override void GetInfo()
            {
                  base.GetInfo();//調用基類的方法,顯示Andy.
                 Console.WriteLine("Chen");//顯示Andy.Chen
            }

        }

base和this的綜合使用code

    public class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.Write("調用父類無參數的構造函數");
        }

        public MyBaseClass(int i)
        {
            Console.Write("調用父類一個參數的構造函數");
        }
    }


    public class MyDerivedClass : MyBaseClass
    {
        public int age;
        public static int age2;//只要類裏存在靜態變量,那麼靜態變量老是最早初始化的。

        //靜態構造函數只執行一次
        static MyDerivedClass() //既然要初始化靜態變量,就要調用靜態的構造函數。
        {
            age2 = 100;
            Console.Write(age2);

        }


        public MyDerivedClass()
            : this(5)//調用當前實例有參數的構造函數。若是隻調用這個構造函數,那還須要調用一次基類沒有參的構造函數!!!
        {
            age = 101;
            Console.WriteLine(age);
        }
public MyDerivedClass(int i) : base(i)//調用基類有參數的構造函數 { age = 102; Console.WriteLine(age); } public MyDerivedClass(int i, int j) { Console.WriteLine("兩個變量的參數"); } } class Program { static void Main(string[] args) { MyDerivedClass myder = new MyDerivedClass(); //輸出100 ,"調用父類無參數的構造函數",101 //執行順序:<1>: static MyDerivedClass() <2>: public MyBaseClass() <3>:public MyDerivedClass() //--------------------------------------------------------------------------------------------- MyDerivedClass myder2 = new MyDerivedClass(5); //輸出"調用父類無參數的構造函數",102。 //在初始化myder對象的時候已經初始化過靜態變量age2了。由於靜態構造函數最多執行一次,因此初始化myder2對象的時候就不會在繼續初始化靜態變量age2了 //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i) //假如我想在初始化myder2對象的時候調用父類帶有一個參數的構造函數怎麼辦呢?很好辦只要在派生類的構造函數後面加一個:base(i) /* base 關鍵字用於從派生類中訪問基類的成員;指定建立派生類實例時應調用的基類構造函數。 public MyDerivedClass(int i):base(i) { age = 102; Console.WriteLine(age); } 執行順序:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i) 顧這裏輸出的是 "調用父類一個參數的構造函數",102 */ //--------------------------------------------------------------------------------------------- MyDerivedClass myder3 = new MyDerivedClass(5, 6); //輸出"調用父類無參數的構造函數","兩個變量的參數" //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j) Console.ReadKey(); } }
相關文章
相關標籤/搜索