C# 中属性的构造函数初始化

本文关键字:构造函数 初始化 属性 | 更新日期: 2023-09-27 17:56:29

在 C# 类中初始化也具有完全访问权限的属性(get、set)的成员时,是否约定是通过其 Property 方法在构造函数中初始化它们还是直接通过其成员变量初始化它们?

public class Car
{
    private string _brand;
    public Car(string brand)
    {
        // this
        _brand = brand;
        // or that
        Brand = brand;  
    }
    public Brand { get { return _brand; } set { _brand = value; } }
 }

C# 中属性的构造函数初始化

应使用 Property 而不是成员变量设置值。通过这种方式,您可以更改"setter"的实现,并且只需在一个地方修改代码。

例如,如果您发现在设置品牌时还必须更新其他一些属性,例如,品牌具有默认颜色,则可以在 Brand 属性的 set{...} 块中执行此操作。如果在构造器中设置了 _brand 的值,则现在还必须手动更新构造函数中的 Color 属性,或者更新构造函数以现在初始化 Brand 属性而不是字段。

此外,如果您的财产如此简单,则使用"汽车属性"更为传统

public Brand { get; set; }

只有当您需要执行比简单属性集和 get 更多的逻辑时,我才会使用支持字段。

使用内部变量,除非 Set 方法中有需要触发的属性的特定代码。

我总是使用属性访问器,因为这样您的代码就可以为将来的更改做好更充分的准备。例如,正如其他人指出的那样,您在此处提供的代码可以使用自动属性重写。此外,如果在整个类中使用属性访问器,则可以更改属性的实现,并且只需在一个位置更改代码。

当你构造一个类时,它应该准备好使用,不需要进一步的初始化操作。

如果您的属性必须以某种方式初始化,则应通过构造函数完成。

我一直在

做/看到_brand=品牌的方式。这是有道理的,您正在设置类的内部状态。这些属性用于外部访问。

我建议使用他们的成员变量,这是对堆栈的少一个调用。

在构造函数中,我更喜欢_brand = brand .我将 getter 和 setter 视为外部类调用的方法。开销也略低,因为您可以避免额外的方法调用。