home commit with new plugins

This commit is contained in:
2026-06-21 09:51:55 +08:00
parent ebb9e385c5
commit 3d067fe75c
85 changed files with 10794 additions and 1443 deletions
+61 -63
View File
@@ -1,90 +1,88 @@
# 成员属性
概念:
==和成员变量不完全是一个概念!!!!==
1. 用于保护成员变量
2. 为成员属性的获取和复制添加逻辑处理
3. 解决3P局限性
自动属性
- 属性(Property)不是字段本身,而是==对字段的访问入口==
- 它看起来像变量,用起来也像变量,但本质上是特殊方法
- 属性常用于:读取、赋值、校验、限制访问
通常用法:
配合private加密或规范成员属性的修改获取等
让其==只能获取不能修改== 或 ==只能修改不能获取==
1. 保护字段,不让外部随便乱改
2. 在赋值或读取时加入逻辑
3. 做“只能读”“只能类内改”“初始化后不可改”等控制
语法:
属性声明:
```Csharp
访
{
get{}
set{}
}
```
案例:
```Csharp
class Person()
完整语法:
```csharp
class Person
{
private int age;
private string name;
private int money;
private bool sex;
public string Name [[|]]
public string Name
{
get====
get
{
//这里写处理获取内容的逻辑
return name;
}
set
{
//这里写处理修改/添加内容的逻辑,不写就没有
==//关键字value 用于表示外部传入的值 只在set中有==
name = value;
}
}
}
```
案例:
```csharp
class Person
{
private int age;
public int Age
{
get
{
return age;
}
set
{
if (value < 0)
{
age = 0;
return;
}
age = value;
}
}
}
Person p = new Person();
~~p.name = xxx~~ private所以没法用.name
p.Name = xxx
p.Age = -5;
Console.WriteLine(p.Age); // 0
```
↑写了一个public的属性大家都可以访问,用该属性Name进行修改 return直接返回原始的nameset时使用.Name将xxx作为传入参数放到set的value关键字中
说明:
- `get` 负责取值
- `set` 负责赋值
- `set` 里的 `value` 表示外部传入的新值
案例2
```Csharp
public int Money()
{
get
{
return money;
}
set
{
if(value<0) value = 0;
cw();
money = value;
}
}
自动属性
```csharp
public string Name { get; set; }
public float Height { get; private set; }
public string Id { get; init; }
```
↑最简单的防止money为负数的逻辑
补充:
- 自动属性会由编译器生成隐藏的 backing field
- `private set` 表示外部能读、类内部能改
- `init` 表示只能在创建对象时赋值
注意:
==get必须有返回值==
成员属性不加访问修饰符,会使用成员变量声明时的访问权限
==get和set也可以加访问修饰符,但不能大于成员属性前访问修饰符的权限==
可以只有一个set或只有一个get(只能得或只能改),但是通常没人这么干
自动属性
相当于声明了一个成员变量,但是好处是可以添加访问修饰符
案例:可以得,但是不能改得一个成员↓
```Csharp
public float Height
{
get;
private set;
}
```
1. ==`get` 中如果要返回值,就必须 `return`==
2. 属性本身的访问级别看属性前面的修饰符
3. `get` / `set` 可以单独再加更严格的访问修饰符,但不能比属性本身更开放
4. 只有 `get` 没有 `set` 时是只读属性
5. 只有 `set` 没有 `get` 时是只写属性,但实际开发里很少这样写
6. 属性不是普通变量,所以通常不能当 `ref` / `out` 参数传入
#封装
#核心