base和this的用法

/*
* this关键字
* this关键字引用类的当前实例
* 注意:静态成员方法中不能使用this关键字,this关键字只能在实例构造函数、实例方法或实例访问器中使用
*/


/*
* base关键字
* base关键字用于从派生类中访问基类的成员;
* 指定创建派生类实例时调用基类构造函数;
* 调用基类上已被重写的方法
* 注意:不能从静态方法中使用base关键字,base关键字只能在实例构造函数、实例方法或实例访问器中使用
*/

注意 构造函数和方法区别

1,简单来说,构造函数就是仅在类实例化的时候自动运行的没有返回值的方法,构造函数的作用就是在类实例化(静态类初始化)的时候将类中的字段等通过直接设置或调用其它方法等手段来设置一个默认值,构造函数没有返回值,而方法有

2,构造函数是在对象实例化时自动调用,而方法是需要对象实例后再能调用

 

base用法
1、base调用构造方法

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();
            }
        }

2、base在派生类中调用基类的方法

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的综合使用

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();
        }
    }

猜你喜欢

转载自www.cnblogs.com/weihengblogs/p/9258597.html