 C# 属性(Property)
C# 属性(Property)
  在C#中,属性(Property)是一种特殊的成员,用于封装类中的字段(Field)和计算值,以提供对类的访问。属性允许您在外部代码中像访问字段一样访问类的内部数据,但是使用属性会使代码更加安全和易于维护。
# 声明属性
在C#中,属性由两个访问器(Accessor)组成,分别为"get"和"set"。 "get"访问器返回属性的值,而"set"访问器用于设置属性的值。要声明一个属性,您可以使用以下语法:
<访问修饰符> <属性类型> <属性名> { get; set; }
其中:
- <访问修饰符>:可以是public、private、internal等访问修饰符,用于指定属性的可访问性。
- <属性类型>:指定属性的数据类型。
- <属性名>:指定属性的名称。
- { get; set; }:指定属性的访问器。
下面是一个示例:
public class Person
{
    private string name;
    
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
在上面的代码中,我们声明了一个名为"Name"的属性,它的类型是字符串。该属性有一个"get"访问器和一个"set"访问器,用于获取和设置私有字段"name"的值。
# 自动属性
在C# 3.0及更高版本中,您可以使用自动属性(Auto-implemented Property)来更方便地声明属性。自动属性是一种特殊类型的属性,它将"get"和"set"访问器的实现留给编译器自动生成。要声明自动属性,您可以使用以下语法:
<访问修饰符> <属性类型> <属性名> { get; set; }
下面是一个示例:
public class Person
{
    public string Name { get; set; }
}
在上面的代码中,我们声明了一个名为"Name"的自动属性,它的类型是字符串。该属性有一个"get"访问器和一个"set"访问器,它们的实现由编译器自动生成。
# 只读属性
只读属性(Read-only Property)是一种属性,它只有"get"访问器,没有"set"访问器。只读属性通常用于表示计算值或从外部访问私有字段的值。要声明只读属性,您可以使用以下语法:
<访问修饰符> <属性类型> <属性名> { get; }
下面是一个示例:
public class Circle
{
    private double radius;
    
    public Circle(double radius)
    {
        this.radius = radius;
    }
    
    public double Radius
    {
        get { return radius; }
    }
    public double Area
    {
        get { return Math.PI * radius * radius; }
    }
}
在上面的代码中,我们声明了一个名为"Radius"的只读属性,它返回私有字段"radius"的值。我们还声明了另一个名为"Area"的只读属性,它返回圆的面积,这是一个计算值。
# 只写属性
只写属性(Write-only Property)是一种属性,它只有"set"访问器,没有"get"访问器。只写属性通常用于设置私有字段的值,而不需要从外部读取该值。要声明只写属性,您可以使用以下语法:
<访问修饰符> <属性类型> <属性名> { set; }
下面是一个示例:
public class Account
{
    private decimal balance;
    
    public void Deposit(decimal amount)
    {
        balance += amount;
    }
    
    public void Withdraw(decimal amount)
    {
        if (balance >= amount)
        {
            balance -= amount;
        }
        else
        {
            throw new Exception("Insufficient funds");
        }
    }
    
    public decimal Balance
    {
        set { balance = value; }
    }
}
在上面的代码中,我们声明了一个名为"Balance"的只写属性,它用于设置私有字段"balance"的值。我们还声明了两个方法"Deposit"和"Withdraw",用于存款和取款,这些方法可以更改"balance"的值。
# 属性访问
要访问一个属性,您可以使用以下语法:
<实例>.<属性名> = <值>;
<值> = <实例>.<属性名>;
其中:
- <实例>:指定类的实例。
- <属性名>:指定属性的名称。
- <值>:指定要设置或获取的值。
下面是一个示例:
Person person = new Person();
person.Name = "Tom";
string name = person.Name;
在上面的代码中,我们创建了一个名为"person"的"Person"类的实例。然后,我们设置该实例的"Name"属性的值为"Tom"。最后,我们获取该实例的"Name"属性的值,并将其存储在名为"name"的字符串变量中。
# 总结
在C#中,属性是一种特殊的成员,用于封装类中的字段和计算值,以提供对类的访问。属性由"get"和"set"访问器组成,用于获取和设置属性的值。自动属性是一种特殊类型的属性,它将"get"和"set"访问器的实现留给编译器自动生成。只读属性和只写属性分别用于表示计算值和设置私有字段的值。要访问一个属性,您可以使用实例和属性名称的组合。
希望这篇文章对您有所帮助!
