【问题标题】:what is the benefit of get set for simple variables [duplicate]为简单变量设置设置有什么好处[重复]
【发布时间】:2012-10-29 13:51:39
【问题描述】:

可能重复:
Public Fields versus Automatic Properties

我想这会在某个地方得到回答,但我在通常的地方找不到它。我想知道,这样做有什么好处

private int _foo;
public int foo {get {return _foo;} set{_foo = value;}}

public int foo {get; set;}

刚刚结束

public int foo;

如果需要更复杂的操作,我可以看到好处,但是像这样的简单案例有什么好处?

【问题讨论】:

    标签: c# get set


    【解决方案1】:

    实际上,所有指南都是关于创建可重用库的。在那里,当您创建 property(使用 get/set)时,您还可以在以后添加在某人获取或设置值时执行的代码(如添加验证等),而无需更改代码的外部定义(因此不需要重新编译其他库)。但是,如果您总是重新编译整个解决方案而没有其他人使用该库,这将毫无价值。

    使用属性的另一个好处是您可以限制谁可以获取或设置该值。例如,每个人都可以获取该值,但只有派生类可以设置它(protected)。

    也就是说,仍然建议始终在属性为 public 时使用它们(而不是 private 字段)。

    我只在需要尽可能好的性能时才公开字段(例如连续访问值百万次)。

    总结一下

    属性(get/set)相对于字段的好处:

    • 以后无需重新编译引用此代码的程序集即可添加代码。
    • 能够提供私有/受保护/内部集和公共获取(或任何其他组合)。
    • 公共字段不是CLS compliant

    属性的缺点:

    • 访问速度较慢(读取和写入)。
    • 不能作为 ref 参数传递给方法。

    【讨论】:

    • 但是您以后不能将库中的变量更改为属性,对使用该变量/属性的应用程序透明吗?
    • 不,如果将公共字段更改为公共属性,则必须重新编译所有引用该字段的应用程序
    【解决方案2】:

    这个问题在这里被问了很多次。 这些案例没有明确的好处证据(财产内部没有逻辑)。 会说更多,使用字段,您可以获得一些最小(纳米)的速度优势,但与 99.99% 的情况无关。

    MS 定义的指南建议使用properties,以提高代码的可扩展性和可维护性。因此,遵循该指南可以让不熟悉代码的人更轻松地阅读它。

    【讨论】:

    • This question was asked many times here - 所以找到一个副本并投票关闭。
    • 我应该搜索什么才能找到它?我尝试了“设置的好处”
    • @Rawling:这类问题有不同的“形状”,可以用不同的方式来解释或解释。因此,与其简单地指出链接,不如尝试了解我对此的看法。
    【解决方案3】:

    有关此问题的讨论,请参阅 this Jon Skeet tutorialWhen to use properties instead of functions。还有十亿个与此主题相关的问题和资源,Google/SE 搜索将公开这些问题和资源。

    我希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      据我说,使用“get-set”是提供一个属性。基本上,您在为变量提供 get-set 属性的同时实现了封装的概念。

      【讨论】:

        【解决方案5】:

        假设您在一个类中有公共变量来存储数据。 但是,如果您需要进行数据验证,则无法使用类中的公共变量来执行此操作。因为你无法控制它们。局外人、其他程序员、任何访问您的项目的人都可以在一个类中编辑这些公共变量。

        主要是,为了控制对您班级中数据的访问,我们使用属性。它们仍然是变量,但在您班级的权限范围内。这些变量可以来自任何数据类型(例如 String、Int、Bool、Objects 等)

        可以使用三个主要选项来实现属性,具体取决于您希望使用属性实现什么/如何实现。

        Get - access to the property and retrieve its value
        Let - access to the property and update its value
        Set - access to the property and used with objects 
        

        了解 Get/Set 方法的真正用途至关重要。我同意 Tigaran 的评论。

        如果有人反对我,我想知道原因!

        【讨论】:

          【解决方案6】:

          我想你已经回答了自己的问题。

          对于像这样的简单情况,没有真正的优势。使用速记属性创建自动获取/设置方法:

          public int Foo { get; set; }
          

          对于需要转换的更复杂的示例,您可以灵活地使用显式 get 和 set 方法进行更改。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-08
            • 2016-04-06
            • 2020-06-12
            • 1970-01-01
            • 1970-01-01
            • 2015-03-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多