C# 属性(Property)
C# 属性(Property)
在C#中,属性(Property)是一种特殊的类成员,用于提供对类私有字段(Private Field)的访问器(Accessor)。可以将属性看作是访问或修改类成员变量的方法,保证数据的可控性和安全性。
类型(Type)的属性由get、set访问器提供。get访问器提供属性值,set访问器对属性进行设置或修改操作。由于属性的访问器相当于方法,因此访问器可以包含可执行的代码来过滤、适当格式化输入或输出数据、触发事件、验证数据等操作,为属性的访问增加了灵活性和扩展性。属性也可以定义为只读(Read-only)或只写(Write-only)的。
我们通常使用自动实现属性(Automatic Property)和完全属性(Full Property)在类中定义属性以及访问器。在实现属性时,需要使用get和set关键字来为属性提供访问器,格式如下:
public [访问控制符] [数据类型] [属性名]
{
get
{
[get访问器的代码];
}
set
{
[set访问器的代码];
}
}
其中,[访问控制符]
表示了该属性的安全等级,只有定义了属性的类和派生类才能访问;[数据类型]
表示了属性值的数据类型;[属性名]
是属性的名称,根据C#的命名规则为PascalCase。
自动实现属性
自动实现属性是最常见的实现属性的方法之一。自动实现属性不需要使用任何字段,但要求数据类型在装配时必须指定。一个简单的自动实现属性如下所示。
public string Name { get; set; }
该属性名称为Name,其类型为string,可同时具有读取和设置有效属性值的get和set访问器。在使用这种属性时,只需要使用实例.Name即可。在访问属性时,自动实现属性会自动提供一个默认的实例字段来存储数据。
Person p = new Person();
p.Name = "John";
Console.WriteLine(p.Name); // 输出John
注意:当使用自动实现属性时,我们无法通过编程方式访问该属性的后备字段。
完全属性
完全属性的格式与自动实现属性的格式相同,但使用了私有字段(Private Field)来存储数据。这种属性需要提供get和set访问器,在设置和获取属性值时使用私有字段。
例如,我们构造一个保存Person对象地址的Address类。这个类的完全属性如下所示。
class Address
{
private string streetName;
private int houseNum;
private string zipCode;
private string state;
public string StreetName
{
get { return streetName; }
set { streetName = value; }
}
public int HouseNum
{
get { return houseNum; }
set { houseNum = value; }
}
public string ZipCode
{
get { return zipCode; }
set { zipCode = value; }
}
public string State
{
get { return state; }
set { state = value; }
}
}
在上面的代码中,get访问器返回了相应的私有字段,set访问器将value设置为私有字段的值。
属性的用途
属性可以用于对类成员变量的访问限制和封装。同时也可以在属性访问器中增加控制和校验代码,确保只有有限的数据被修改和调用。在属性概念的推动下,C#中的LINQ和Entity Framework都大量使用属性处理。您可以使用属性在实例中简化代码调用,并在代码中实现更简单的逻辑。
总之,在C#中,属性是一种对类的成员变量进行控制访问的重要方式,允许将读写控制、验证、错误处理、封装和隐藏操作绑定在数据访问操作上。