C#中构造函数的使用

C#中的构造函数
构造函数的作用:帮助我们初始化对象(给对象的每个属性依次的赋值)
构造函数是一个特殊的方法,写在自己构造的类里
1)、构造函数没有返回值,连void也不能写
2)、构造函数的名称必须跟类名一样

我们先在一个项目总创建一个Student类

        private string _name;      
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private int _age;
        public int Age
        {
            get { return _age; }
            set {
                if(value<0||value>100)
                {
                    value = 0;
                }
                _age = value; }

        }
        private char _gender;
        public char Gender
        {
            get {
                if(_gender!='男'&&_gender!='女')
                {
                    _gender = '男';
                }
                return _gender; }
            set { _gender = value; }
        }
        private int _chinese;
        public int Chinese
        {
            get { return _chinese; }
            set { _chinese = value; }
        }
        private int _math;
        public int Math
        {
            get { return _math; }
            set { _math = value; }
        }
        private int _english;
        public int English
        {
            get { return _english; }
            set { _english = value; }
        }
        public void SayHello()
        {
            Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生", this.Name, this.Age, this.Gender);
        }
        public void ShowScore()
        {
            Console.WriteLine("我叫{0},我今年的总分是{1},平均分是{2}", this.Name, this.Chinese + this.Math + this.English,  (this.Chinese + this.Math + this.English)/3 );
        }

在main方法中调用这个类里边的成员

static void Main(string[] args)
        {
            Student LiSi = new Student();
            LiSi.Name = "李四";
            LiSi.Age = 23;
            LiSi.Gender = '男';
            LiSi.Chinese = 34;
            LiSi.Math = 43;
            LiSi.English = 78;
            LiSi.SayHello();
            LiSi.ShowScore();

            Student WangWu = new Student();
            WangWu.Name = "王五";
            WangWu.Age = 45;
            WangWu.Gender = '女';
            WangWu.Chinese = 12;
            WangWu.Math = 45;
            WangWu.English = 90;
            WangWu.SayHello();
            WangWu.ShowScore();
            Console.ReadKey();
        }

可以看到每次进行类的实例化以后,在对对象进行初始化时都需要对字段的属性重新赋值,十分繁琐,代码量会增多。这个时候需要构造函数了。

在Student类中写一个构造函数

public Student(string name, int age, char gender, int chinese, int math, int english)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
            this.Chinese = chinese;
            this.Math = math;
            this.English = english;

        }

构造函数的访问类型必须是public,以便在main函数中能够调用。构造函数无返回值且***名称必须和该类名一样***。在形参列表中分别定义对应字段属性的变量。在函数内部将该对象的字段的属性进行赋值。接下来,在main函数中类的实例化中传参。

Student LiSi = new Student("李四", 34, '男', 56, 56, 56);
            //LiSi.Name = "李四";
            //LiSi.Age = 23;
            //LiSi.Gender = '男';
            //LiSi.Chinese = 34;
            //LiSi.Math = 43;
            //LiSi.English = 78;
            LiSi.SayHello();
            LiSi.ShowScore();

注释掉的代码是不需要的。这样做减少了代码量。

注:

  1. new关键字
    Person ZhangSan=new Person();
    new帮助我们做了三件事;
    1)在内存中开辟了一块空间
    2)在开辟的空间中创建对象
    3)调用对象的构造函数进行了初始化对象
  2. 构造函数是可以有重载的
  3. 类中会有一个默认的无参数的构造函数,当你写了一个新的构造函数以后,不管是有无参数,那个默认的无参数的构造函数都被干掉了。

你可能感兴趣的:(面向对象初级,c#,面向对象编程,类)