c#中的私有变量与属性

本文关键字:变量 属性 | 更新日期: 2023-09-27 18:02:50

我正在自学c#,我很好奇是否需要声明由公共属性访问的私有成员变量。我使用的教科书说,这是为了封装,但为什么我需要私有变量开始,如果属性可以改变取决于他们的"get"或"set"函数?下面是一个例子:

namespace Practice
{
    struct Person
    {
        private int id;
        private string name;
        public int ID { get {return id;} set {id = value;} }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    class Program
    { 
        static void Main(string[] args)
        {
            Person person = new Person();
            person.ID = 548;
            person.Name = "Dude";
            Console.WriteLine(person.Name);
        }
    }
}

所以Name和ID的操作方式完全相同,那么声明private int idprivate string name的目的是什么呢?

c#中的私有变量与属性

在您的示例中,由于您没有对支持字段(私有字段)做任何操作,因此您不需要它。您可以使用auto属性(但是,请记住,auto属性在后台使用后台字段)

有一个后备字段是有用的,如果你做任何操作,例如,如果你想验证ID应该总是大于100,那么你可以做

public int ID
{
    get
    {
        return id;
    }
    set
    {
        if(id <= 100) throw new Exception("Invalid ID provided");
        id = value;
    }
}

如果你试图在你的属性上应用相同的逻辑,而不是支持字段,那么你将/可能会遇到无限递归。