可能重复:
公共字段与自动属性
我想这会在某个地方得到回答,但我在通常的地方找不到它。我想知道,这样做有什么好处
private int _foo;
public int foo {get {return _foo;} set{_foo = value;}}
或者
public int foo {get; set;}
刚刚结束
public int foo;
如果需要更复杂的操作,我可以看到好处,但是像这样的简单案例有什么好处?
实际上,所有的指导方针都是关于创建可重用的库。在那里,当您创建一个property
(使用 get/set)时,您还可以在不更改代码的外部定义(因此不需要重新编译其他库)。但是,如果您总是重新编译整个解决方案并且没有其他人使用该库,那么这没有任何价值。
使用属性的另一个好处是您可以限制谁可以获取或设置该值。例如,每个人都可以获取该值,但只有派生类可以设置它(protected
)。
这就是说,仍然建议始终使用属性public
(而不是private
字段)。
我只在需要最佳性能时才公开字段(例如连续访问值百万次)。
所以总结一下
属性(获取/设置)对字段的好处:
属性的缺点:
ref
参数传递给方法。这个问题在这里被问了很多次。这些案例没有明确的利益证据(财产内部没有逻辑)。会说更多,使用字段,您可以获得一些最小(纳米)的速度优势,但与 99.99% 的情况无关。
MS 定义的指南建议使用properties
, 来提高代码的可扩展性和可维护性。因此,遵循该指南可以让不熟悉代码的人更轻松地阅读它。
请参阅此 Jon Skeet 教程或何时使用属性而不是函数来讨论此问题。还有十亿个与此主题相关的问题和资源,Google/SE 搜索将公开这些问题和资源。
我希望这有帮助。
据我说,使用“get-set”是提供一个属性。基本上,您在为变量提供 get-set 属性的同时实现了封装的概念。
想象一下,您在一个类中有公共变量来存储数据。但是,如果您需要进行数据验证,则无法使用类中的公共变量来执行此操作。因为你无法控制它们。局外人、其他程序员、任何访问您的项目的人都可以在一个类中编辑这些公共变量。
主要是,为了控制对您类中数据的访问,我们使用属性。它们仍然是变量,但在您班级的权限范围内。这些变量可以来自任何数据类型(例如 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 的评论。
如果有人要对我投反对票,我想知道原因!
我想你已经回答了你自己的问题。
对于像这样的简单情况,没有真正的优势。使用速记属性创建自动获取/设置方法:
public int Foo { get; set; }
对于需要转换的更复杂的示例,您可以使用显式的 get 和 set 方法灵活地更改内容。