zoukankan      html  css  js  c++  java
  • C# base和this的用法

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


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

    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(); } }
  • 相关阅读:
    CF 1006C Three Parts of the Array【双指针/前缀和/后缀和/二分】
    经验笔记二
    CF 1006B Polycarp's Practice【贪心】
    CF 1003D Coins and Queries【位运算/硬币值都为2的幂/贪心】
    CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】
    CF 1003B Binary String Constructing 【构造/找规律/分类讨论】
    CF 1005C Summarize to the Power of Two 【hash/STL-map】
    CF 1005B Delete from the Left 【模拟数组操作/正难则反】
    CF 1005A Tanya and Stairways 【STL】
    CF 1009A Game Shopping 【双指针/模拟】
  • 原文地址:https://www.cnblogs.com/AndyChen2015/p/7927575.html
Copyright © 2011-2022 走看看