C# 关于Get和Set的快速问题
如果类中有以下代码,get和set方法是否与该变量关联?如何使用类的实例访问get和setC# 关于Get和Set的快速问题,c#,get,set,C#,Get,Set,如果类中有以下代码,get和set方法是否与该变量关联?如何使用类的实例访问get和set public string Something { get; set; } 这本质上是一个编译器技巧。编译代码时,编译器将生成一个隐藏字段以及在get和set中返回和设置字段所需的代码 您可以像访问任何其他属性一样访问此属性MyClass.Something=“bla”这是一个自动属性,它在编译器中创建一个支持字段,您无需为其编写代码 获取: 设置: 编译器为您创建了一个包含getter和setter方
public string Something { get; set; }
这本质上是一个编译器技巧。编译代码时,编译器将生成一个隐藏字段以及在get和set中返回和设置字段所需的代码
您可以像访问任何其他属性一样访问此属性
MyClass.Something=“bla”
这是一个自动属性,它在编译器中创建一个支持字段,您无需为其编写代码
获取:
设置:
编译器为您创建了一个包含getter和setter方法(*)的支持变量,但您在标准代码中看不到它们。您只需直接访问该属性即可
myClass.Something = "blah"; // uses set
string myValue = myClass.Something; // uses get;
*这些方法是为属性创建的,而不是自动实现的。对于自动实现的属性,编译器生成的支持变量将添加到混合中。这与下面的代码类似,但击键次数要少得多:-)
此语法随.Net Framework 3.5(自动属性)提供 就像:
private string something;
public string Something
{
get { return something; }
set { something = value; }
}
要访问此变量(假定位于MyClass类中),请执行以下操作:
编译器将此转换为:
public string Something { get; set; }
转化为类似的内容(在IL中,为了方便起见,转换为C):
此外,编译器会将这些行:
Something = "test";
var result = Something;
为此:
set_Something("test");
var result = get_Something();
所以你看,下面都是方法调用(就像在Java中一样),但实际上在C#中有属性语法。但是如果您试图直接调用这些方法,您会得到一个。不,它被称为自动属性(magic),您不能在不指定{get;set;}的情况下使用此代码吗?我在路上cornfused@Soo:是的,这将定义公共字段,例如
公共字符串某物代码>。不同之处在于,对于属性,可以(显式地)有支持变量,可以在setter中进行验证,可以对get和set使用不同的访问修饰符(因此,可能外部代码可以获取该值,但只有类本身可以设置该值),或者是上述加上我没有提到的其他内容的组合。首选的方法是通过属性而不是字段公开数据。不要忘记声明您的_Something变量;-)
// GET
MyClass myObj = new MyClass();
string test = myObj.Something;
// SET
myObj.Something = "blabla";
public string Something { get; set; }
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();