美文网首页菜鸟学编程
C#构造函数中this和base的使用

C#构造函数中this和base的使用

作者: 菜鸟飞不动 | 来源:发表于2019-08-08 01:05 被阅读2次

    C#构造函数中this和base的使用

    结论

    构造函数的作用是,给对象成员进行初始化。

    然后,构造函数this和base的作用就是:

    1. this相当于继承了自己类的最完整的那个构造函数,目的就是省字数。
    2. base相当于继承了父类的构造函数,目的也是省字数。

    this

    一般的构造函数,里面是一堆参数,方便实例化的时候给参数赋值(俗称初始化)

    带this的构造函数,借“主构造函数”(参数最多的)的参数来用,不需要的参数用任意相同类型的值来补,目的就是为了避免大括号里面每个参数再赋值一遍,造成代码冗余

     public class Student
        {
            //一般的构造函数,里面是一堆参数,方便实例化的时候给参数赋值(俗称初始化)
            public Student(string name, int age, string gender)
            {
                this.Name = name;
                this.Age = age;
                this.Gender = gender;
            }
            //带this的构造函数,借“主构造函数”(参数最多的)的参数来用,不需要的参数用任意相同类型的值来补,目的就是为了避免大括号里面每个参数再赋值一遍,造成代码冗余
            public Student(string name):this(name,1,"a")
            { }
            public string Name { get; set; }
            public int Age { get; set; }
            public string Gender { get; set; }
            public void SayHello()
            {
                Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生", this.Name, this.Age, this.Gender);
            }
            public void SayHello2()
            {
                Console.WriteLine("我叫{0}",this.Name);
            }
        }
    

    base

    class Program
        {
            static void Main(string[] args)
            {
                Student s = new Student("李四", 28, "女");
                s.SayHello();
                Student s2 = new Student("王五", 22, "男", 88, 23);
                s2.SayHello2();
                Console.ReadKey();
            }
            //Person类,这里有个地方要注意,之前偷懒不爱写字段,只写个属性。其实这样不好,因为如果只有属性,并且属性设为只读,那就没法改了,构造函数也不行。
            public class Person
            {
                private string name;
                public string Name
                {
                    get { return name; }
                    set { name = value; }
                }
                private int age;
                public int Age
                {
                    get { return age; }
                    //set { age = value; }
                }
                private string gender;
                public string Gender
                {
                    get { return gender; }
                    //set { gender = value; }
                }
    
                //父类构造函数,有name,age,gender三个参数
                public Person(string name, int age, string gender)
                {
                    //这里用this代表本类Person,用来区分参数name,不然重名了。
                    //在构造函数里将参数赋值给字段,这样就可以越过只读属性,直接修改字段了。
                    this.name = name;
                    this.age = age;
                    this.gender = gender;
                }
            }
            //Student类,继承Person类。如果Person类内有自己写的有参构造方法,则Student类的构造方法必须要加:base继承这个构造方法!因为默认的Student:base(空)构造方法已经被干掉了!
            public class Student : Person
            {
                public int Chinese { get; set; }
                public int Math { get; set; }
    
    
                //如果不加:base会提示Person不包含0个参数的构造函数。
                public Student(string name, int age, string gender)//蒋坤:构造方法的定义
                    : base(name, age, gender)//蒋坤:构造方法的调用//base里的参数,前面Student里面写什么,这里就写什么。
                { }
                public void SayHello()
                {
                    Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生", this.Name, this.Age, this.Gender);
                }
    
                //子类构造函数有chinese,math两个,必须要加上父类的构造函数,参数如果没有值的话随便写
                public Student(string name, int age, string gender, int chinese, int math)
                    : base(gender, age, name)//base里的参数,前面Student里面写什么,这里就写什么,前提是Person类有对应的这三个参数。因为这个Person类参数少,所以就写满三个就行,不然还要补空值。
                {
                    this.Chinese = chinese;
                    this.Math = math;
                }
    
    
                public void SayHello2()
                {
                    Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,语文{3}分,数学{4}分。", this.Name, this.Age, this.Gender, this.Chinese, this.Math);
                }
            }
        }
    

    相关文章

      网友评论

        本文标题:C#构造函数中this和base的使用

        本文链接:https://www.haomeiwen.com/subject/knbodctx.html