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