85 lines
1.8 KiB
Markdown
85 lines
1.8 KiB
Markdown
|
|
概念:
|
|||
|
|
==和成员变量不完全是一个概念!!!!==
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
```
|