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
- C++——构造函数
- C#——构造函数
- C++——构造函数
- C#——构造函数
- 【C++】基础知识—构造函数与拷贝构造函数
- C/C++——构造函数和析构函数
- C++——拷贝构造函数
- C++——深入构造函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- c#——构造函数/析构函数
- 初识C#——构造函数与析构函数
- 学习C++——构造函数和析构函数
- C++——构造函数和析构函数初识
- C#—构造函数和析构函数
- C/C++—— 默认构造函数是否会执行
- C++——派生类的构造函数实例
- C++——构造和析构函数
- C++——转换构造函数和转换运算符
- Java---关于forward和redirect的描述
- 浅谈L0,L1,L2范数及其应用
- NOIp模拟 解题
- ubuntu安装IDEA2016
- 161113
- C#——构造函数
- ubuntu下opencv安装
- c#使用aspose.cells 从datatable导出数据到excel
- 9C切面条
- C++模板与泛型编程
- Android动态加载入坑指南
- poj1258 Agri-Net 最小生成树
- 《python+opencv实践》四、图像特征提取与描述——30Harris 角点检测
- PHP入门问题