获取的目的是什么:设置

本文关键字:设置 获取 是什么 | 更新日期: 2023-09-27 18:32:24

C# 中的许多代码示例都包含getset代码块。它们的目的是什么?我复制这些块,因为它们出现在示例代码中,但不知道它的用途。有人可以向我解释一下吗?

获取的目的是什么:设置

Getter 和 setter 使您能够将一对函数组合到一个属性中,并允许您使用看起来像成员访问表达式的语法或赋值来代替看起来像显式函数调用的语法。

这里有一个小例子:而不是这个

internal class Example 
{
    private int x;
    public int GetX() => x;
    public void SetX(int value) => x = value;
}
...
var e = new Example();
e.SetX(123);
Console.WriteLine($"X = {e.GetX()}");

他们让你这样做:

internal class Example 
{
    public int X { get; set; }
}
...
var e = new Example();
e.X = 123;
Console.WriteLine($"X = {e.GetX()}");

第二个代码段的语法更易于阅读,因为X看起来像一个变量。同时,第二个代码段提供相同级别的封装,使您可以隐藏属性后面的实现。

你的意思是这个吗?

public int SomeValue { get; set; }

这基本上是语法简写:

private int someValue;
public int SomeValue
{
    get { return someValue; }
    set { someValue = value; }
}

这本身基本上是对此的简写:

private int someValue;
public int GetSomeValue() { return someValue; }
public void SetSomeValue(int value) { someValue = value; }

(尽管编译器在执行此操作时对事物名称使用不同的约定。

由于它与OOP相关,这是数据的封装。 这个想法是对象应该隐藏其数据并公开功能,而不仅仅是直接公开数据。 因此,您不必直接从对象外部修改someValue。 在对象上调用方法并为其提供一个值。 在内部,对象处理其数据的实际存储。

public int foo { get; set; }

这将定义一个属性。它基本上就像一个公共领域,但在反思方面却有所不同。在 C#/.NET 中,通常将属性用于公共事物。您可以将其与 Java 中的 getter/setter 方法进行比较。

现在令人敬畏的是,您还可以使用自定义获取/设置代码或使setget更不可见。这使您可以拥有getter/setter方法的优势,而没有方法调用而不是属性访问的丑陋。

public int foo {
    get { return this.some_foo; }
    set { this.some_foo = value; this.run_code_after_change(); }
};

在英语中,他们是二传手和二传手。

希望你自学封装,二传手和吸盘手都因为封装而复活了。

同样,在简单的英语中,二传手和getters使您能够访问您定义的属性。

getset是一种句法糖。这是实现函数的更具可读性的方式,无需参数,您可以在其中插入例如验证(在 setter 中)或在 getter 中的字段上进行计算。括号在这样的功能中是无用的。