c# - 在 C# 中寻找 getters/setters 的简短示例

标签 c# setter getter getter-setter

我无法理解 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/

相关文章:

c# - 在 Json.Net 中生成换行符而不是 CRLF

c# - 您多久看到一次滥用 C# 速记 getter/setter 的情况?

java - getter 和 setter 方法的问题

python - 如何迭代由 getter 或 @property 定义的对象的属性?

javascript - 如何为已定义的 JavaScript 对象定义 getter 属性?

c# - 如何获取用户控件数据类型所在的TabPage

c# - 'DateTime' 和 'DateTimeOffset' 之间的区别

c# - 使用 Blazor 渲染未知深度的树结构

ruby - Mongoid 自定义 setter/getter 和 super

c++ - 在 C++ 中编写函数指针的 setter 和 getter