Mah*_*aga 23 c# asp.net variables properties private
对不起如果我是菜鸟,我有这个疑问,为什么我们使用私有变量并使用属性设置它们?
为什么我们不能单独使用专业人士?
我在谈论这样的情况
private string _testVariable;
public string MyProperty
{
    get { return _testVariable;}
    set {_testVariable = value;}
}
我在考虑简单地使用
public string MyProperty { get; set; } 
为什么冗余私有变量?这两种策略有什么不同?任何人都可以请注意这一点.
谢谢
Ada*_*son 31
您的示例在语义上是相同的.简洁的属性声明语法(只有{ get; set; })是C#3.0中提供的快捷方式.编译器实际上创建了一个私有后备变量和一个简单的getter和setter,如第一个示例所示.
如果你所做的只是创建一个getter和setter(并且在发生任何事情时都没有发生任何事情),那么简洁的语法是一个不错的选择.如果在设置值时必须执行任何其他操作(例如重绘控件),则需要完整语法.
Jul*_*iet 14
为什么冗余私有变量?这两种策略有什么不同?任何人都可以请注意这一点.
如果你所做的只是读/写变量,那么没有.否则,您需要私有变量的原因有两个:
数据验证
// Data validation
public class IntWrapper
{
    private int _value;
    public int Value
    {
        get { return _value; }
        set
        {
            if (value < 0) { throw new Exception("Value must be >= 0"); }
            _value = value;
        }
    }
}
Getter/setter包装底层数据存储
public class StringBuffer
{
    List<char> chars = new List<char>();
    // Wraps up an underlying data store
    public string Value
    {
        get { return new String(chars.ToArray()); }
        set { chars = new List<char>(value.ToCharArray()); }
    }
    public void Write(string s) { Write(chars.Count, s); }
    public void Write(int index, string s)
    {
        if (index > chars.Count) { throw new Exception("Out of Range"); }
        foreach(char c in s)
        {
            if (index < chars.Count) { chars[index] = c; }
            else { chars.Add(c); }
            index++;
        }
    }
}