是否可以跳过私有字段并只使用C#中的属性?

时间:2017-02-28 04:07:59

标签: c#

我的讲师告诉我们使用私人田地和公共场所。最近,我正在观看教程视频。演示者仅创建属性。可以使用该属性吗?

3 个答案:

答案 0 :(得分:5)

公共属性,例如

public string Name { get; set; }

由编译器自动实现私有后备字段。您永远不会看到它们,但效果与手动指定的支持字段相同。

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

答案 1 :(得分:3)

对于.Net framework 2.0及更少,私有字段是必需的,否则您将收到编译错误。

.Net Framework的更高版本中,它可以正常运行而不会出现任何错误。

使用私有字段有很多优点

  1. 在将输入分配给属性

    之前验证输入
    public int Max
    {
        get { return m_Max; }
        set
        {
            if (value>0 && value<100)
            {
                m_Max=value;
            }
        }
    }
    
  2. 触发错误值的例外

  3. 来自https://msdn.microsoft.com/en-us/library/ms229006.aspx

      
        
    1. 如果属性设置器抛出异常,则保留以前的值。

    2.   
    3. 避免从属性getter中抛出异常。如果吸气者可以扔   例外,它应该被重新设计为方法

    4.   
        public int Max
        {
            get { return m_Max; }
            set {
                if(value > 0 && value < 100){ \\Value is within valid range
                    m_Max = value;
                }
                else if(value < 0)
                    //throw some exception to indicate value is not valid
                else if(value > 100)
                    //throw some exception to indicate value is not valid 
            }
        }
    

答案 2 :(得分:-1)

是的,没有私有字段可以使用公共属性,但只使用公共字段是不行的。这样做的原因在于,您可以在以后内部更改验证和存储字段的方式,而只更改公共字段会破坏您班级的任何用户。关键的区别在于,对于属性,您仍然可以控制类的内部状态,即使这是使用自动生成的字段,而使用公共字段则不是。