get:set的目的是什么?

时间:2013-09-23 18:17:36

标签: c# properties

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

5 个答案:

答案 0 :(得分: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());

他们允许你这样做:

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

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

答案 1 :(得分:3)

你是说这个吗?:

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。您在对象上调用方法并为其提供值。对象内部处理其数据的实际存储。

答案 2 :(得分:2)

public int foo { get; set; }

这定义了一个属性。它基本上就像一个公共领域,但是当涉及到反思它是不同的。在C#/ .NET中,通常使用属性来处理公共事物。您可以将它与Java中的getter / setter方法进行比较。

现在很棒的是,您还可以使用自定义获取/设置代码或使set不如get更明显。这样你就可以获得getter / setter方法的优点,而不需要方法调用而不是属性访问。

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

答案 3 :(得分:0)

在英语中,他们是制定者和吸气者。

希望你自学封装,制定者和吸气剂由于封装而上升。

再次用简单的英语,setter和getter使您能够访问您定义的属性。

答案 4 :(得分:0)

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