Keep on going never give up.

Let's Go

C# 学习笔记(24)构造函数中this和base的使用

C#Lonely2019-05-08 21:00:0039次0条

关于构造函数中的this代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Person
    {
        public string Name { get; set; } //姓名
        public char Sex { get; set; } //性别
        public int Age { get; set; } //年龄
        public string Tel { get; set; } //电话
        public string Address { get; set; } //住址
        
        //一般的构造函数,里面是一堆参数,方便实例化的时候给参数赋值(俗称初始化)
        public Person(string name, char sex, int age, string tel, string address) //构造函数
        {
            Name = name;
            Sex = sex;
            Age = age;
            Tel = tel;
            Address = address;
        }
        
        //构造函数是可以有重载的
        //带this的构造函数,借“主构造函数”(参数最多的)的参数来用,不需要的参数用任意相同类型的值来补,目的就是为了避免大括号里面每个参数再赋值一遍,造成代码冗余
        public Person(string name, char sex, int age) : this(name, sex, age,"","") //this关键字作用:(1)代表当前类的对象。(2)在类当中显示的调用本类的构造函数,语法 :this()
        {
        
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person("张三",'男',22,"13888888888","花果山水帘洞");
            Console.WriteLine("我叫:{0},性别:{1},年龄:{2},电话:{3},住址:{4}", p1.Name, p1.Sex, p1.Age, p1.Tel, p1.Address);
            Person p2= new Person("王燕", '女', 18);
            Console.WriteLine("我叫:{0},性别:{1},年龄:{2}", p2.Name, p2.Sex, p2.Age);
            Console.ReadKey();
        }
    }
}

运行结果:

image.png


关于构造函数中的base代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Person
    {
        public string Name { get; set; } //姓名
        public char Sex { get; set; } //性别
        public int Age { get; set; } //年龄
 
        //一般的构造函数,里面是一堆参数,方便实例化的时候给参数赋值(俗称初始化)
        public Person(string name, char sex, int age) //构造函数
        {
            Name = name;
            Sex = sex;
            Age = age;
        }
        
    }
    
    class Student: Person //继承Person类
    {
        public double Chinese { get; set; }
        public double Math { get; set; }
        public double English { get; set; }
        
        //如果Person类内有自己定义有参的构造方法,则Student类的构造方法必须要加:base继承这个构造方法!因为默认的Student:base(空)构造方法已经被干掉了!
        //因为Person类没有定义无参的构造函数,所以不加:base会提示Person不包含0个参数的构造函数
        public Student(string name, char sex, int age) : base(name, sex, age)//base里的参数,前面Person类构造函数的参数里面写什么,这里就写什么。
        {
        
        }
        
        //base里的参数,前面Person类构造函数的参数里面写什么,这里就写什么。前提是Person类有对应的这三个参数。因为这个Person类参数少,所以就写满三个就行,不然还要补空值。
        public Student(string name, char sex, int age, double chinese, double math, double english) : base(name, sex, age)
        {
            Chinese = chinese;
            Math = math;
            English = english;
        }
        
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu_1 = new Student("赵六", '男', 20);
            Console.WriteLine("我叫:{0},性别:{1},年龄:{2}", stu_1.Name, stu_1.Sex, stu_1.Age);
            Student stu_2 = new Student("胖虎", '男', 20,95,98.5,60);
            Console.WriteLine("我叫:{0},性别:{1},年龄:{2},语文成绩:{3},数学成绩:{4},英语成绩:{5}", stu_2.Name, stu_2.Sex, stu_2.Age, stu_2.Chinese, stu_2.Math, stu_2.English);
            Console.ReadKey();
        }
    }
}

运行结果:

image.png


构造函数的作用是:初始化对象。

构造函数this和base的作用是:

1、this相当于继承了自己类的最完整的那个构造函数,目的就是避免代码冗余。

2、base相当于继承了父类的构造函数,目的也是避免代码冗余。

暗锚,解决锚点偏移

文章评论

    嘿,来试试登录吧!