C# C语言中的字段和属性最佳实践#

C# C语言中的字段和属性最佳实践#,c#,c#-3.0,C#,C# 3.0,亲爱的各位,哪一个是使用C#的最佳实践?为什么? 一, 二, 三, 四,。 请添加…片段1和2都可以。当您不需要访问底层字段时,第二种方法只是更方便地编写第一种方法 但是,通常应该避免使用Snippet3(除非您有特定的理由需要它),因为字段几乎总是私有的。如果需要为子类提供不同的字段设置方法(这不太可能),则可以使用方法或其他属性 请记住,受保护的成员本质上只是一个稍微受限制的公共成员,因为只要它位于子类中,客户端代码就可以访问它。这意味着客户端代码可以直接绑定到类的实现中,而不是类的接口中,

亲爱的各位,哪一个是使用C#的最佳实践?为什么?
一,

二,

三,

四,。
请添加…

片段12都可以。当您不需要访问底层字段时,第二种方法只是更方便地编写第一种方法

但是,通常应该避免使用Snippet3(除非您有特定的理由需要它),因为字段几乎总是私有的。如果需要为子类提供不同的字段设置方法(这不太可能),则可以使用方法或其他属性


请记住,受保护的成员本质上只是一个稍微受限制的公共成员,因为只要它位于子类中,客户端代码就可以访问它。这意味着客户端代码可以直接绑定到类的实现中,而不是类的接口中,这是一件坏事

标准格式通常:

private string name;

public string Name
{
    get { return name;}
    set { name= value; }
}

作为标准做法,字段将是私有的。您的属性将具有
public
保护修饰符。

从第二个代码段开始,即

public string Name { get; set; }
当需要添加验证时,将其更改为第一个代码段的形式,或者在设置值时执行一些逻辑操作


我要避免最后一个选项,因为它允许重写类直接访问将您与特定实现联系在一起的支持字段(这也意味着可以绕过您可爱的验证)

公开公共属性是为了避免向使用者公开类的公共字段。属性允许您控制消费者使用它的方式(通过get&set)

第一个是好的,在你的第二个样本(使用公共和保护)你只是打破了

public string Name {get;set}
第二个示例是一个自动属性,通常在getter和setter中没有任何逻辑时使用。这也是写第一个例子的简短形式

第三个示例有一个
受保护的
支持字段,因此子类可以直接访问该支持字段


根据您的目标选择格式。另外,考虑其他团队成员是否已经达成了一致的格式。

在我所写的应用程序中,如果GETER和SETER不是比你的例子更复杂的话,你可能希望尽可能地减少代码的可读性,所以速记方法非常有用。另一方面,如果在getter和setter中实现更复杂的逻辑(例如某种验证或解析),则需要确保没有用户类绕过您的逻辑


此外,正如Binary Worner在评论中指出的,这取决于您需要什么,以及您想要什么。你知道
private
protected
public
之间的区别,因此你也知道你可以和不能对你的类做什么,这取决于你选择的类。哪一个是“最好的”完全取决于您希望(或不希望)从使用此属性的其他类中允许的行为。

将自动属性(Nº2)作为默认值写入,除非您的getter/setter中包含某种逻辑,否则将写入属性(或字段)没有任何原因吗?您必须同意,直接访问其私有字段的公共属性与公共字段(或自动属性)相同


这种方法很容易生成代码。例如,如果您有带属性的Excel或db表,您必须实现一个类,您可以检查这个正则表达式,通过字段或get操作读取两个属性的最佳实践是什么?我自己的结论是从现场得到的,因为这是你想要处理的信息,只需要问问我是否想错了

   private string _key;
   private string _subKey;
   private string _fullKey;

   public string SubKey
    {
        get
        {
            return _key;
        }
        set
        {
            _key = value;
        }
    }

    public string SubKey
    {
        get
        {
            return _subKey;
        }
        set
        {
            _subKey = value;
        }
    }
一,

二,


使用你需要的东西,一个也不比另一个好。根据你想要达到的目标,每一个答案都是可免除的。重复-@yayan:如果你发现其中一个答案有用,请用选票下面的勾号图标将其标记为接受,好吗?+表示受保护的警告。应该强制继承者使用基类的属性。
public string Name { get; set; }
public string Name {get;set}
    #region LinkURL

    private string _LinkURL = String.Empty;
    public string LinkURL
    {
        get { return _LinkURL; }
        set { _LinkURL = value; }
    }

    #endregion LinkURL
   private string _key;
   private string _subKey;
   private string _fullKey;

   public string SubKey
    {
        get
        {
            return _key;
        }
        set
        {
            _key = value;
        }
    }

    public string SubKey
    {
        get
        {
            return _subKey;
        }
        set
        {
            _subKey = value;
        }
    }
public string FullKey
{
get
{
return _subKey + _key;
}
}  
public string FullKey{
get
{
return SubKey + Key
}
}