Getter 和 Setter 与类方法

mor*_*hhn 2 c# getter-setter

我正在询问使用 getter 和 setter 的建议。我在两个版本中编写了相同的代码:使用 getter 和 setter 以及仅使用类方法。而且我看不出它们之间的区别。

我用私有字段评级编写了类 Book。并且构造函数 Book 可以通过 RatingSetter 或 RatingMethod 为 Book.rating 分配一些东西。RatingMethod 只设置值,但我也可以创建一个仅用于获取值的方法。

class Book
    {
        public string title;
        public string author;
        private string rating;

        public Book(string title, string author, string rating)
        {
            this.title = title;
            this.author = author;
            RatingSetter = rating;
            RatingMethod(rating);
        }

        public string RatingSetter
        {
            get { return this.rating; }
            set
            {
                if (value == "PG" || value == "PG-13" || value == "R")
                {
                    rating = value;
                }
                else
                {
                    rating = "NR";
                }
            }
        }

        public string RatingMethod(string rating)
        {
            if (rating == "PG" || rating == "PG-13" || rating == "R")
            {
                return this.rating = rating;
            }
            else
            {
                return this.rating = "NR";
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,安全性、验证或任何东西都没有区别。任何人都可以指导并帮助我了解有什么区别以及为什么建议使用 getter 和 setter。

Swe*_*per 6

getter 和 setter 只是语法糖。编译器最终会将您的 getter 和 setter 编译为 getter 和 setter方法。因此,通过自己编写 getter 和 setter 方法,您相当于在完成编译器的工作。

因此,我建议您使用 getter 和 setter,因为它们的主要用途之一是替换 getter 和 setter 方法。

以下是使用 getter 和 setter 的其他一些优点:

  • 如果您只需要没有任何逻辑的 getter 和 setter,则 getter 和 setter 可以为您节省大量时间:

    public int Property { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  • IMO,getter 和 setter 的审美看起来更好。相比:

    obj1.Property += obj2.Property;
    
    Run Code Online (Sandbox Code Playgroud)

    obj1.SetProperty(obj1.GetPropert() + obj2.GetProperty());
    
    Run Code Online (Sandbox Code Playgroud)

    我觉得后者只是有太多的括号......

  • 保持 setter 和 getter 靠近属性声明。如果您使用 getter 和 setter 方法,您可能会不小心在属性声明和 getter/setter 方法之间编写其他方法,导致 getter/setter 方法慢慢“偏离”属性声明。下次要查找时,需要上下滚动。使用 getter 和 setter,它们将始终低于属性声明。