C#——构造函数

来源:互联网 发布:批量重命名软件 编辑:程序博客网 时间:2024/06/07 05:52

【前言】


结合上一篇博客,针对当我们访问类的属性时,反复赋值,出现代码冗余的问题,这次我们引进一个新的解决办法,就是构造函数,直接传递参数就可以实现属性值的初始化。


【内容】


普通办法访问属性缺点:

当我们访问类的属性的时候,需要多次赋值,出现了冗余的代码;当我们对zsStu.Age=-88,当对写入操作没有限制的时候,就破坏了数据的完整性,并且不安全。

static void Main(string[] args)        {            student zsStu = new student();            zsStu.Name = "张三";            zsStu.Age = 18;            zsStu .Gender ='男';            zsStu .Chinese =90;            zsStu .Math =95;            zsStu .English =80;            zsStu .sayhello ();            zsStu .score ();            //冗余            Console.WriteLine("==============================");            student xlStu = new student();            xlStu.Name = "小兰";            xlStu.Age = 16;            xlStu.Gender = '女';            xlStu.Chinese = 95;            xlStu.Math = 85;            xlStu.English = 60;            xlStu.sayhello();            xlStu.score();            Console.ReadKey();        }


解决:构造函数
这时我们就要定义构造函数:构造函数就是一个方法,但方法名是类名。

作用:
通过构造函数可以避免繁琐的赋值操作,属性为只有读操作,这样保证了属性的安全很完整性,但是属性不能赋值,如何对属性操作呢?这时可以通过构造函数对属性的值进行初始化。 

如何定义?
下面就是定义了一个Person类的构造函数,括号里面的是参数,把参数的值赋给字段。
namespace _03_类的构造函数{    public class Person    {        //Person类的构造函数        public Person(string name,char gender,int age)        {            this.name = name;//当前字段=参数.把变量的值赋值给字段            this.age = age;            this.gender = gender;        }        private string name;        public string Name        {            get { return name; }              }        private char gender;        public char Gender        {            get { return gender; }                  }        private int age;        public int Age        {            get { return age; }               }

怎么实现属性的初始化操作?
当我们在主函数中实例化并调用这个方法的时候,会把值传递给上面的在Person类中定义的构造函数,也就是传参,然后把传递过来的值赋值给字段。
 class Program    {        static void Main(string[] args)        {            Person per = new Person("张三",'男',18);//利用构造函数给里面的字段赋值。            per.Show();            Console.ReadKey();                        //第一 之前那么赋值麻烦,繁琐            //第二 变成只读,安全                        //per.Name = "张三";//只读,没那么容易赋值;该怎么赋值?            //构造函数的出现,解决了赋值麻烦的问题        }    }

优点:
1.不会像之前那样繁锁地赋值
2.当为某个类定义了构造函数之后,这个类的属性为只读属性,通过构造函数就可以初始化该属性,这样保证了属性值得安全和完整性。

构造函数的重载
在一个类中可以定义多个构造函数,以便提供多个不同的初始化方法,这些构造函数有相同的名字,只是参数的数目和类型不同。

下面定义了三个构造函数,只是参数不同。
public Person(string name, char gender, int age)//有参的构造函数,原来默认无参数的被覆盖了        {            this.name = name;//当前字段=参数.把变量的值赋值给字段            this.age = age;            this.gender = gender;        }        //想用到无参数的怎么办,构造函数的重载        public Person()                //无参数的构造函数        {         }        public Person(string name)        {            this.name = name;        }

构造函数如何使用?
在主函数中使用重载的构造函数,需要注意:对于对象来说,每个对象只执行其中一个构造函数。
class Program    {        static void Main(string[] args)        {                       //写一个类,如果没有写任何的构造函数,那么这个类有个默认无参数的构造函数;            Person per = new Person();            Person per1=new Person("张三",'男',18);            Person per2 = new Person("小兰");        }    }

【总结】

构造函数是一种特殊的方法,没有返回值,没有void声明。直接传递参数就可以实现赋值操作,默认的是一个无参的构造函数,如果定义了一个有参的构造函数,则无参的就不在存在。如果想使用,则需要重新声明。




0 0