【发布时间】:2015-01-15 19:03:23
【问题描述】:
我是一名有抱负的学生,未来的目标是从事计算机科学职业。我已经阅读了相当多的文档,并且我了解 OOP 的基础知识,但我想知道 {Get ; Set;} 方法在 c# 中是如何使用的。提前致谢。
例如
public class Car
{
public Name { get; set; }
}
【问题讨论】:
我是一名有抱负的学生,未来的目标是从事计算机科学职业。我已经阅读了相当多的文档,并且我了解 OOP 的基础知识,但我想知道 {Get ; Set;} 方法在 c# 中是如何使用的。提前致谢。
例如
public class Car
{
public Name { get; set; }
}
【问题讨论】:
这个public string Name { get; set; } 被称为自动实现的属性。编译器将创建一个私有支持字段,该字段将保存我们将使用此属性设置的值。此外,它将创建两种方法,一种用于set(设置值),另一种用于get(获取值)该值。你可以认为set 是一个赋值,get 是一个读取。因此,当我们说我们set 一个值时,实际上我们的意思是我们为一个变量赋值。当我们说我们get 一个值时,实际上我们的意思是我们读取了存储在变量中的值。
此外,这个public string Name { get; set; } 等价于以下内容:
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
相互比较,第一个代码行数相同,但代码行数更少。但是,在这两种情况下,C# 编译器都会像我上面所说的那样创建一种设置值的方法和一种获取值的方法。主要区别在于,在第二种情况下,不需要创建支持字段。
更新
为了更清楚上面的内容,我创建了一个控制台应用程序,其中我添加了一个名为Customer 的类,其定义如下:
class Customer
{
public string Name { get; set; }
}
我运行了我的 fantastic 应用程序,然后我查看了由 C# 创建的 MSIL 代码。
我使用名为Ildasm.exe (IL Disassembler) 的免费.net 反汇编程序创建了上述内容。顾名思义,这个工具显示了 C# 编译器在我们构建一个应用程序时创建的 IL 代码。可以在here找到一个关于这个工具的好教程。
如您所见,Customer 类型被编译为一个具有支持字段和两个方法的类,get_Name 和set_Name。这些是由 C# 编译器自动创建的。
【讨论】:
我不使用 C# 编程,但 get 和 set 方法在大多数 OOP 语言中的工作方式相同。它与面向对象编程中的封装 概念有关。您声明一个类私有的数据成员,然后使用get 方法访问它,并使用set 方法对其进行更改。这对客户端/用户隐藏了这些方法的实际实现,因此它隐藏了数据。
这是一个简单的 Java 示例:
public class SomeClass {
private int data;
public int getData() {
return data;
}
public void setData(int newValue) {
data = newValue; // Hidden from the user
}
}
【讨论】: