如果类中有以下代码,那么get和set方法是否与变量相关联?如何使用类的实例访问get和set?
public string Something { get; set; }
答案 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)
答案 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。