C#-类:成员属性
数据成员 ≠ 属性 = 成员属性
属性可以理解为一种封装
-
成员属性概念:一般是用来保护成员变量的
-
成员属性的使用和变量一样,外部用对象点出
-
get中需要return内容 ; set中用value表示传入的内容
-
get和set语句块中可以加逻辑处理。应用:加密解密
-
get和set可以加访问修饰符,但是要按照一定的规则进行添加
-
get和set可以只有一个
-
自动属性是属性语句块中只有get和set,一 般用于 外部能得不能改
一:属性的语法规则
1.1 使用常规方法对字段进行封装
class Student
{
private int age;
public void SetAge(int age)
{ this.age=age;}
public int GetAge()
{ return age;}
}
-----------------------
Main()
{
Student a1=new Student();
a1.SetAge(17);
Console.WriteLine(a1.GetAge());
}
1.2 使用属性对字段进行封装
属性命名:一般使用帕斯卡命名(首字母大写)
1.2.1 属性的完整写法
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
---------
//属性的使用
void Main(){
Person p = new Person();
p.Name="小白";//调用set逻辑
Console.WriteLine(p.Name);//调用get逻辑
}
一般需要配置一个私有的字段,并在属性的 get 和 set 访问器中添加自定义逻辑
1.2.2 自动属性
public class Person
{
public string Name { get; set; }
}
系统会自动生成一个私有的返回字段
1.2.3 只读属性
public class Person
{
public string Name { get; private set; }
}
只能被读取,不能被外部代码修改
1.2.4 表达式属性
C# 6 引入了表达式成员,允许使用一行代码定义属性。
public class Person
{
public string Name => "John";
}
1.2.5 有逻辑的属性
可以在get,set语句块中增加逻辑,如验证、记录、计算等
public class Person
{
private int _age;
public int Age
{
get { return _age; }
set
{
if (value < 0)
return -1;
_age = value;
}
}
}
二:属性的访问权限
不能同时让set和get的访问修饰符与外部的访问修饰符不同 。
不能外部private而内部是public