关于获取和设置的快速问题

时间:2010-10-14 14:35:10

标签: c# get set

如果类中有以下代码,那么get和set方法是否与变量相关联?如何使用类的实例访问get和set?

public string Something { get; set; }

7 个答案:

答案 0 :(得分:5)

这本质上是一个编译技巧。编译代码时,编译器将生成一个隐藏字段和必要的代码以返回并在get和set中设置字段。

您可以访问此属性,就像访问任何其他属性一样。 MyClass.Something = "bla"

答案 1 :(得分:4)

此语法随.Net Framework 3.5(自动属性)

一起提供

就像:

private string something;
public string Something
{
     get { return something; }
     set { something = value; }
}

要访问此变量(应该在MyClass类中):

// GET
    MyClass myObj = new MyClass();
    string test = myObj.Something;
// SET
    myObj.Something = "blabla";

答案 2 :(得分:1)

这是一个自动属性,它在编译器中创建一个支持字段,您无需为其编写代码。

得到:

var str = instance.Something;

组:

instance.Something = "new value";

答案 3 :(得分:1)

  1. 这是编译器的新功能
  2. 它叫做自动属性
  3. 您不需要为自动属性定义后备存储,编译器会为您完成该任务。
  4. 您无法在自动属性中注入自定义代码,您需要恢复为正常的1.1样式的声明属性。
  5. 您可以在访问常规属性时访问自动属性

答案 4 :(得分:0)

编译器会为您创建一个带有getter和setter方法(*)的后备变量,但您不会在标准代码中看到它们。您只需直接访问该物业。

myClass.Something = "blah"; // uses set
string myValue = myClass.Something; // uses get;

*这些方法是为属性创建的,而不是自动实现的。在自动实现的属性的情况下,编译器生成的后备变量被添加到混合中。

答案 5 :(得分:0)

这就像下面的代码,但键击次数要少得多: - )

public string Something {
    get() {
        return _Something;
    }
    set(string value) {
        _Something = value;
    }
}

答案 6 :(得分:0)

编译器将其转为:

public string Something { get; set; } 

进入这样的事情(在IL中,为方便起见,转换为C#):

string _something;
public string get_Something() { return _something; }
public void set_Something(string value) { _something = value; } 

此外,编译器会转换这些行:

Something = "test";
var result = Something;

进入这个:

set_Something("test");
var result = get_Something();

所以你看,它是下面的所有方法调用(就像在Java中一样),但在C#中拥有属性语法真的是sweet。但是,如果您尝试直接调用这些方法,则会得到error