- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我无法理解 C# 语言中 getter 和 setter 的概念。在像 Objective-C 这样的语言中,它们似乎是系统不可或缺的一部分,但在 C# 中却并非如此(据我所知)。我已经阅读过书籍和文章,所以我的问题是,对于那些了解 C# 中的 getter 和 setter 的人,如果您向一个完全的初学者教授这个概念,您个人会使用什么示例(这将包括尽可能少的尽可能多的代码行)?
最佳答案
我认为一些代码将有助于说明什么是 setter 和 getter:
public class Foo
{
private string bar;
public string GetBar()
{
return bar;
}
public void SetBar(string value)
{
bar = value;
}
}
在这个例子中,我们有一个名为 bar 的类的私有(private)成员。 GetBar 和 SetBar 方法完全按照它们的名称进行操作 - 一个检索 bar 成员,另一个设置它的值。
在 c# 1.1 + 中你有属性。基本功能也是一样的:
public class Foo
{
private string bar;
public string Bar
{
get { return bar; }
set { bar = value; }
}
}
私有(private)成员bar在类外不可访问。然而公共(public)的“Bar”是,它有两个访问器——get,就像上面的例子“GetBar()”返回私有(private)成员,还有一个集合——对应于前面提到的 SetBar(string value) 方法示例。
从 C# 3.0 及更高版本开始,编译器已优化到这样的程度,即此类属性不需要将私有(private)成员作为其来源。编译器自动生成该类型的私有(private)成员并将其用作属性的来源。
public class Foo
{
public string Bar { get; set; }
}
代码显示的是一个自动属性,它有一个由编译器生成的私有(private)成员。您看不到私有(private)成员,但它在那里。这也引入了一些其他问题——主要是访问控制。在 C# 1.1 和 2.0 中,您可以省略属性的获取或设置部分:
public class Foo
{
private string bar;
public string Bar
{
get{ return bar; }
}
}
让您有机会限制其他对象如何与 Foo 类的“Bar”属性交互。从 C# 3.0 及更高版本开始 - 如果您选择使用自动属性,则必须按如下方式指定对属性的访问:
public class Foo
{
public string Bar { get; private set; }
}
这意味着只有类本身可以将 Bar 设置为某个值,但是任何人都可以读取 Bar 中的值。
关于c# - 在 C# 中寻找 getters/setters 的简短示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159438/
因此,我需要获取在为其赋值时调用的 setter 的名称。像这样: var b = {}; var a = { set hey(value) { b[] = value; } } 我希望 se
我是 Android 编程的新手(~ 2 个月)有必要为几十个不同的变量设置 getter 吗? 例如—— //Yes I realise that this isn't 'dozens' publi
import Control.Lens import Control.Lens.TH data Foo = Foo { _bar, _baz :: Int } makeLenses ''
我有点困惑:我可以覆盖 setter/getter 但仍然使用 super setter/getter 吗?如果是 - 怎么办? 用例: class A { void set value(num
我有一个接收消息的应用程序。消息中存在可编辑的字段。当字段更改时,应将其保存到数据库中。不幸的是,setter 仅在 setter 的范围内更改给定字段的值。知道为什么会发生这种情况吗?这是 gett
C# 中有没有一种方法可以让 setter 从“某物”继承,这样每次为特定基类及其继承者调用 setter 时,我都可以运行一些代码? 我想做的是在我的基类上有一个名为 IsValid 的 bool
可能是一个我无法解决的非常简单的问题 - 我从 C# 开始,需要使用 getter/setter 方法向数组添加值,例如: public partial class Form1 : Form {
这两个属性实现有什么区别? public override string A { get { return "s"; } set { } } public override strin
是否可以使用 abc.abstractproperty 创建一个具体的 getter 但将 setter 抽象为每个继承类的不同。我为每个子类处理不同的 val 设置。 例如。 @abstractpr
我在某处看到类似下面的内容,想知道它是什么意思。我知道他们是getter和setter,但是想知道为什么字符串Type是这样定义的。谢谢你帮助我。 public string Type { get;
Public class Example { private int number; public Example(int number){ this.number =
假设我有这样的代码: public response MyMethod(Request req) { String id = req.getFirst().geId(); } 我已经模拟了主对
允许这样做: public int Age { get; set; } 但是应用程序是否为变量创建/分配空间?我经常这样做 private int age = 0; public int Age {
我有一个条件,我构造字符串 (finalValue) 的方式是基于我在输入中获得的非空值的数量。所以我想知道是否可以用一个不同的参数为字符串 (finalValue) 重载 setter 方法并根据我
例如,在这段代码中 var o = { set a(value) {this.b = value}, get a() {return this.b} } 是否有可能获得对 o.a 的 sett
我一直在努力了解 getter 和 setter,但没有深入了解。我读过 JavaScript Getters and Setters和 Defining Getters and Setters只是没
我想在我的类中添加一个 getter 和 setter。然而,setter 应该接收一个 querySelector,但 getter 返回一个新类型 pageSections。 我的问题是 gett
使用有什么好处: private var _someProp:String; public function set someProp(value:String):void { _somePr
当从域类调用它时,我想在我的 setter 中执行一些操作,而不是从 hibernate 中调用它时。此外,我正在使用 session 工厂,因此我无法使用 @PostLoad 来触发标志! 有人对此
人员类别: public class Person { private String firstName; private String lastName; public Pe
我是一名优秀的程序员,十分优秀!