Files
My-Notes/笔记/CSharp/核心/成员属性.md
T
2026-06-21 09:51:55 +08:00

1.7 KiB

成员属性

概念:

  • 属性(Property)不是字段本身,而是==对字段的访问入口==
  • 它看起来像变量,用起来也像变量,但本质上是特殊方法
  • 属性常用于:读取、赋值、校验、限制访问

通常用法:

  1. 保护字段,不让外部随便乱改
  2. 在赋值或读取时加入逻辑
  3. 做“只能读”“只能类内改”“初始化后不可改”等控制

完整语法:

class Person
{
	private string name;

	public string Name
	{
		get
		{
			return name;
		}
		set
		{
			name = value;
		}
	}
}

案例:

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.Age = -5;
Console.WriteLine(p.Age); // 0

说明:

  • get 负责取值
  • set 负责赋值
  • set 里的 value 表示外部传入的新值

自动属性:

public string Name { get; set; }
public float Height { get; private set; }
public string Id { get; init; }

补充:

  • 自动属性会由编译器生成隐藏的 backing field
  • private set 表示外部能读、类内部能改
  • init 表示只能在创建对象时赋值

注意:

  1. ==get 中如果要返回值,就必须 return==
  2. 属性本身的访问级别看属性前面的修饰符
  3. get / set 可以单独再加更严格的访问修饰符,但不能比属性本身更开放
  4. 只有 get 没有 set 时是只读属性
  5. 只有 set 没有 get 时是只写属性,但实际开发里很少这样写
  6. 属性不是普通变量,所以通常不能当 ref / out 参数传入

#封装 #核心