📅  最后修改于: 2023-12-03 15:30:16.459000             🧑  作者: Mango
C# 属性(Properties)是一种用来封装类字段(Fields)的特殊成员,可让用户对字段进行读写、值验证或执行一些其他操作。属性通常用作替代直接访问类中的字段,从而实现更好的代码封装和安全性。
属性可以理解为一个特殊的方法,包含 get 和/或 set 访问器。set 访问器可选,如果属性仅具有 get 访问器,则为只读属性(ReadOnly Property),只有 set 访问器则为只写属性(WriteOnly Property)。详细示例如下:
public class MyClass
{
private int _myField; // 定义私有字段
public int MyProperty // 定义属性
{
get { return _myField; }
set { _myField = value; }
}
}
上述代码演示了如何在 C# 中声明一个属性。MyProperty 属性包含 get 和 set 访问器,用来对私有字段 _myField
进行读写操作。
在调用属性时,会自动调用相应的 get 或 set 访问器。示例如下:
MyClass myObject = new MyClass();
myObject.MyProperty = 10; // 调用 set 访问器将值赋给属性
int val = myObject.MyProperty; // 调用 get 访问器获取属性的值
当代码调用 myObject.MyProperty = 10
时,CLR 将调用 set
访问器并将其参数设置为 10。当代码调用 val = myObject.MyProperty
时,CLR 将自动调用 get 访问器,并将结果赋给变量 val
。
只读属性指只具备 get 访问器的属性,与类中的公有字段不同,只读属性无法在执行后修改其值。常用于返回基于类字段计算得出的值。
示例如下:
public class Rectangle
{
private double _length;
private double _width;
public Rectangle(double length, double width)
{
_length = length;
_width = width;
}
// 只读属性,返回矩形面积
public double Area
{
get { return _length * _width; }
}
}
上述代码演示了在类中声明一个只读属性 Area
,它返回基于 _length
和 _width
字段计算的值。
自动实现属性(Auto-Implemented Properties)是一种简化属性声明的方式,可以省略 get 和 set 访问器的实现细节。在此种情况下,编译器将生成一个私有字段来存储属性值,并在运行时自动实现相应的访问器。
示例如下:
public class MyClass
{
public int MyProperty { get; set; } // 自动生成私有字段及相应的访问器实现
}
当声明只具有 get 访问器的自动实现属性时,称为只读自动实现属性:
public class MyClass
{
public int MyProperty { get; } // 自动实现只读属性,等效于 public readonly int MyField;
}
C# 中的属性可以像字段一样,设置访问修饰符并声明为静态属性。常见的修饰符分别为 public、private、internal 和 protected。示例如下:
public class MyClass
{
public int PublicProperty { get; set; } // 公有属性
private int PrivateProperty { get; set; } // 私有属性
internal int InternalProperty { get; set; } // 内部属性
protected int ProtectedProperty { get; set; } // 受保护的属性
public static int StaticProperty { get; set; } // 静态属性
}
本文介绍了 C# 中属性基础知识,包括如何声明和使用属性、只读属性、自动实现属性、属性修饰符等。属性是一种有力的封装方式,可提高代码的安全性和可维护性,并在代码中提供易于理解和操作的接口。