c# - public {get;之间的区别set} 和编程 getter 和 setter

标签 c# encapsulation

<分区>

Possible Duplicate:
What is Difference between Property and Variable in C#

几周前我开始使用 C#,这一直困扰着我。 C# 允许这些所谓的“魔法”getter 和 setter,也称为“语法糖”。所以,我可以这样做:

public int myInt { get;放; }

但是从封装的角度来看,这是毫无意义的。首先,数据成员是public,我可以使用点运算符获取/设置它。但是,如果我这样做:

private int myInt { get;放; }

我根本无法访问它,因为 myInt 由于保护级别而无法访问。这实际上在做什么?我认为这应该是完成数据封装的一种简单方法,所以我不必这样做:

private int myInt;
public void setMyInt(int i) { myInt = i; }
public int getMyInt() { return myInt; }

但事实并非如此。据我所知,我只是将这些变量公开。我想也许我可以做类似的事情

public int myInt { get; }

因此客户端可以获取它,但不能设置它,但是不,仍然允许公共(public)访问。那么给出了什么?

编辑 我不想做任何具体的事情,我只是想了解这实际上是如何工作的。澄清一下:

将变量设为public 并没有完成封装,尤其是当我可以使用点运算符访问它时。为 private 变量编写 getter 和 setter 允许您对变量进行更改,但可以更好地控制实际发生的方式。

最佳答案

目的是通过 future 的修改保持封装。

如果您最初使用自动 getter 和 setter 编写您的类:

public int Count { get; set; }

如果您随后将其更改为,它将保持完全相同的外部接口(interface)

public int Count {
    get { /* very complicated logic */ }
    set { /* even more complicated logic */ }
}

自动的只是帮助你开始简单的属性。

关于c# - public {get;之间的区别set} 和编程 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11652138/

相关文章:

c# - 如何决定 bool 运算符的使用、性能问题与可读性

c# - 将方法从 Java 转换为 C#

c# - StructureMap 动态加载插件 Dll

c# - [A]System.Web.WebPages.Razor.Configuration.HostSection 无法转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection

scala - 什么时候应该对类型成员使用访问修饰符?

c# - 如何创建自时间触发功能?

java - 封装形式不同

java - get 和 set 方法有什么意义

java - 是否需要将私有(private)嵌套类的内部声明为私有(private)?

c++ - 如何私有(private)继承基类的派生类,但实现基类的公共(public)接口(interface)?