第三章、类的构造函数与属性
1、专业单词
| 单词 | 释义 |
|---|---|
| property | 属性 |
| get | 得到、获取 |
| set | 设置 |
2、对象的生命周期
每个对象都有一个明确定义的生命周期,生命周期有三个阶段
-
构造阶段:由构造函数完成,对新建对象进行初始化。
-
正常使用阶段。
-
析构阶段:对象使用完后,进行一些清理工作,如释放内存,C#中由析构函数完成。
3、构造函数的概念
构造函数是个特别的方法,用来初始化类的新建对象(对象存储的数据)。当访问一个类的时候,系统将 首先执行构造函数中的语句。
构造函数在创建类的对象时自动执行,即无论程序是否调用类的字段、属性或方法,构造函数都将在创建 对象时执行。
例: class Human { public Human(){} }
4、构造函数的特征
-
构造函数的名称必须与类的名称相同。
-
构造函数不能声明返回类型(甚至不能使用
void),也不能返回值。 -
一般的,构造函数总是
public,private类型的构造函数表明类不能被实例化,通常用于只含有静态成员的类。 -
在构造函数中不要做初始化以外的事情。
-
构造函数可以重载,从而提供初始化对象的不同方法。
-
实例化对象时由编译器自动调用构造函数,不能显式的调用构造函数。
-
若在定义类时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空。
5、构造函数的应用
-
构造函数的语法
[访问修饰符] 构造函数名 (形参列表)
{
初始化代码
}
6、默认构造函数
-
每个类都有构造函数。即使没有为类声明构造函数,编译器也会自动的为类提供一个默认的构造函数。
-
默认构造函数没有参数,当被执行时,系统会给类的所有字段赋一个默认值,这样能够避免编译错误。
各种类型的字段的默认值
类型 默认值 数值型(各种整数、小数) 0 char '0' boo l false 引用类型 null
7、构造函数的重载
-
构造函数也可以带参数,这样能传递不同的数据来对类的对象进行初始化。
-
一个类可有多个不同参数的构造函数,但由于构造函数只能使用一个名称,即同他所在的类名相同,所以只能用构造函数重载来实现。
例: class Human { public string name; public int age; public Human() { }//无参构造 public Human(string Name) { this.name = Name; } public Human(string Name,int Age) //含参构造 { this.name = Name; this.age = Age; } }
8、属性概念
-
面向对象的封装性原则要求不能直接访问类的数据成员,如何访问类的私有成员呢?为了解决这个问题C#提供了一个称为:属性的访问器来完成这个功能。
-
类的属性所描述的是状态的信息,它借助于get和set访问器来对属性进行访问定义。
9、属性的使用
-
定义属性
语法:
[访问修饰符] [static] 数据类型 属性名
{
get{读访问器体}
set{写访问器体}
}
示例: public class Student { private string _name; //原始写法 public string Name { get { return this._name; } set { this._name = value; } } //屌的写法 public string Name { get=>_name;set=>_name=value; } //便捷写法 public string Name{get;set;} -
访问属性
语法:
访问静态属性:类名.属性名
访问实例属性:对象名.属性名示例: class Student { private string _name; //定义一个静态属性 public string Name{get;set;} public static string power{get;set} } static void Main(string[] args) { //访问静态属性 Student.power=""; //访问实例属性 Student stu=new Student(); stu._Name=""; } -
只读属性
只读属性(少了set访问器);当编程时,有些属性只能返回值,不能重新赋值,就可用只读属性。
只读属性的写法:
//便捷写法
[访问修饰符] 属性的数据类型 属性名称{get;private set;}//可在类中赋值
[访问修饰符] 属性的数据类型 属性名称{get;}//只能在字段中赋值
//原始写法
[访问修饰符] 属性的数据类型 属性名称 {get{return 属性名称};}
//屌的写法
[访问修饰符] 属性的数据类型 属性名称{get=>字段名称;}示例: class Student { private int _age; //便捷写法 public int Age{get;private set;} public int Age{get;} //原始写法 public int Age{return this._age;} //屌的写法 public int Age{get=>_age;} } -
只写属性
只写属性(少了get访问器);当编程时,有些属性只能赋值不能取值,就可用只写属性。
只写属性写法:
//便捷写法
[访问修饰符] 属性的数据类型 属性名称{set;private get;}//可在类中取值
//原始写法
[访问修饰符] 属性的数据类型 属性名称 {set{属性名称=value};}
//屌的写法
[访问修饰符] 属性的数据类型 属性名称{set=>字段名称=value;}
示例:
class Student
{
private int _age;
//原始写法
public int Age{set{this._age=value}}
//便捷写法
public int Age{set;private get;}
//屌的写法
public int Age{set=>_age=value}
}

浙公网安备 33010602011771号