get:set的目的是什么?

Ric*_*lly 0 c# properties

在C#代码的许多样品包含getset代码块.他们的目的是什么?我将这些块复制在示例代码中,但不知道它用于什么.有人可以向我解释一下吗?

das*_*ght 7

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

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

class Example {
    private int x;
    public int GetX() {return x;}
    public void SetX(int value) { x = value;}
}
Example e = new Example();
e.SetX(123);
Console.WriteLine("X = {0}", e.GetX());
Run Code Online (Sandbox Code Playgroud)

他们让你这样做:

class Example {
    public int X {get;set;}
}
Example e = new Example();
e.X = 123;
Console.WriteLine("X = {0}", e.X);
Run Code Online (Sandbox Code Playgroud)

第二个代码片段的语法更容易阅读,因为它X看起来像一个变量.同时,第二个代码段提供相同级别的封装,让您隐藏属性背后的实现.

  • 在您的示例中,为什么不将 X 保留为“public int X”? (2认同)

Dav*_*vid 5

你是这个意思吗?

public int SomeValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

这基本上是语法的简写形式:

private int someValue;
public int SomeValue
{
    get { return someValue; }
    set { someValue = value; }
}
Run Code Online (Sandbox Code Playgroud)

基本上,这本身就是它的简写:

private int someValue;
public int GetSomeValue() { return someValue; }
public void SetSomeValue(int value) { someValue = value; }
Run Code Online (Sandbox Code Playgroud)

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

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