概念: ==和成员变量不完全是一个概念!!!!== 1. 用于保护成员变量 2. 为成员属性的获取和复制添加逻辑处理 3. 解决3P局限性 自动属性 通常用法: 配合private加密或规范成员属性的修改获取等 让其==只能获取不能修改== 或 ==只能修改不能获取== 语法: 属性声明: ```Csharp 访问修饰符 属性类型 属性名 { get{} set{} } ``` 案例: ```Csharp class Person() { private int age; private string name; private int money; private bool sex; public string Name [[命名法|帕斯卡命名法]] { get==必须有返回值== { //这里写处理获取内容的逻辑 return name; } set { //这里写处理修改/添加内容的逻辑,不写就没有 ==//关键字value 用于表示外部传入的值 只在set中有== name = value; } } } Person p = new Person(); ~~p.name = xxx~~ 因为private所以没法用.name p.Name = xxx; ``` ↑写了一个public的属性大家都可以访问,用该属性Name进行修改 return直接返回原始的name,set时使用.Name将xxx作为传入参数放到set的value关键字中 案例2: ```Csharp public int Money() { get { return money; } set { if(value<0) value = 0; cw(没钱); money = value; } } ``` ↑最简单的防止money为负数的逻辑 注意: 成员属性不加访问修饰符,会使用成员变量声明时的访问权限 ==get和set也可以加访问修饰符,但是不能大于成员属性前访问修饰符的权限== 可以只有一个set或只有一个get(只能得或只能改),但是通常没人这么干 自动属性 相当于声明了一个成员变量,但是好处是可以添加访问修饰符 案例:可以得,但是不能改得一个成员↓ ```Csharp public float Height { get; private set; } ```