在这种情况下,值赋值运算符如何工作?

时间:2013-11-24 11:59:09

标签: c# oop

有助于注意我对c#很新。

但请考虑以下课程:

class AllItems
{
    private readonly Database database;

    public AllItems(Database database)
    {
        this.database = database;
    }
}

我有以下问题:

  1. 在上面的示例中,我们为private readonly Database database分配了传递给AllItems类的值,这是正确的吗?

  2. 如果我更换了this.database = database,那么它会变成database = this.database吗?

  3. 我们在说this.database时,this是指AllItems(Database database)中的数据库还是引用private readonly Database database

4 个答案:

答案 0 :(得分:7)

  

在上面的例子中,我们为私有只读数据库数据库分配了传递给AllItems类的值,这是正确的吗?

  

如果我交换了this.database = database,那么它是否重要,所以它看起来像database = this.database

是的,它会的。您最终要做的是将传入的数据库参数分配为数据库字段的值(默认情况下为null)。

  

我们在说this.database,这是指AllItems(数据库数据库)中的数据库还是引用私有只读数据库数据库?

this是当前类实例的简写,因此它引用数据库的私有只读成员。

答案 1 :(得分:2)

  1. 是的,这很重要,然后您会将this.database(在本例中为null)的值分配到database
  2. 在这种情况下,
  3. this.database指的是private readonly Database database;字段。我建议您详细了解this关键字here

答案 2 :(得分:1)

  1. 是的,这是正确的,你可以在类构造函数中设置一个只读字段,这是我们可以初始化只读字段/属性的唯一地方。

  2. 事实上,交换做了一件毫无意义的事情。执行此操作database = this.database时,database被赋予this.database的值,在这种情况下为null,但该局部变量未使用,并且在构造函数外部将变为不可用。 / p>

  3. this.database当然会引用您班级的私人字段。在这种情况下,私有字段和参数具有相同的名称,因此我们必须使用this来避免歧义。

答案 3 :(得分:1)

  

1)在上面的例子中,我们正在为私有只读数据库数据库分配传递给AllItems类的值,这是正确的吗?

是的,this用于引用在类中声明的对象。

  

2)如果我交换了this.database =数据库,那么它看起来像是database = this.database吗?

是的,如果你交换它,而不是将构造函数中声明为参数的数据库中的值赋给private readonly Database database,它会将`private readonly Database database中的值赋给声明为a的数据库构造函数中的参数。

  

3)我们在说这个数据库时,这是指AllItems(数据库数据库)中的数据库还是引用私有只读数据库数据库?

this是一个关键字,用于指代在类中声明的变量,也称为全局变量,因此它引用private readonly Database database

另请查看When do you use the "this" keyword?