# 成员变量和访问修饰符
概念：
1. 成员变量也常叫==字段（field）==
2. 它声明在类或结构体中，用来描述对象状态
3. 字段类型可以是任意合法类型
4. 字段如果没手动赋值，会先使用该类型的默认值

通常用法：
- 保存对象的基础数据
- 配合访问修饰符控制谁能访问
- 再配合[[成员属性]]对外暴露更安全的访问方式

语法：
```csharp
class Human
{
	public string name;
	private int age;
	protected bool isAlive;
	internal Human[] friends;
}
```

访问修饰符：
1. `public`
	类内部和外部都能访问
2. `private`
	只有当前类型内部能访问
3. `protected`
	当前类型和子类能访问
4. `internal`
	同一个程序集内能访问

案例：
```csharp
class Human
{
	public string name;
	private int age;

	public void SetAge(int value)
	{
		age = value;
	}

	public void PrintInfo()
	{
		Console.WriteLine($"{name} - {age}");
	}
}

Human h1 = new Human();
h1.name = "小明";
// h1.age = 18; // 报错，外部不能直接访问 private 字段
h1.SetAge(18);
h1.PrintInfo();
```

注意：
1. ==类中的字段如果不写访问修饰符，默认是 `private`==
2. 字段可以声明成当前类型本身，比如 `Human[] friends`
3. 默认值示例：
	- `int` 是 `0`
	- `bool` 是 `false`
	- 引用类型是 `null`
4. 实际开发中，很多字段会写成 `private`，再通过[[成员属性]]控制访问

#封装
#核心
