在C#中如何使用和实现Get和Set方法

时间:2014-11-18 14:39:05

标签: c# oop methods get set

我是一名有抱负的学生,未来的目标是追求计算机科学的职业。我现在已经阅读了很多文档了,我理解OOP的基本原理,但是我想知道在c#中如何使用{Get ; Set;}方法。提前谢谢。

E.G。

public class Car
{
    public Name { get; set; }
}

2 个答案:

答案 0 :(得分:5)

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; }
}

我运行梦幻般的应用程序,然后查看了C#创建的MSIL代码。

enter image description here

我使用名为Ildasm.exe (IL Disassembler)的免费.net反汇编程序创建了上述内容。这个工具正如其名称所示,当我们构建一个应用程序时,它会显示C#编译器创建的IL代码。可以找到关于此工具的好教程here

当您注意到Customer类型被编译为具有支持字段和两个方法的类get_Nameset_Name时。这些是由C#编译器自动创建的。

答案 1 :(得分:1)

我不使用C#编程,但在大多数OOP语言中,get和set方法的工作方式相同。它与面向对象编程中的封装概念有关。您声明类私有的数据成员,然后使用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
    }
}