📜  C#-属性(1)

📅  最后修改于: 2023-12-03 15:30:16.459000             🧑  作者: Mango

C# 属性

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# 中属性基础知识,包括如何声明和使用属性、只读属性、自动实现属性、属性修饰符等。属性是一种有力的封装方式,可提高代码的安全性和可维护性,并在代码中提供易于理解和操作的接口。