C# - 如何在声明变量之前创建构造函数?

时间:2010-06-21 11:48:48

标签: c# constructor

根据我的问题 - 请使用以下代码:

class Nevermore60Customer: GenericCustomer  
{  
  public Nevermore60Customer(string name, string referrerName)  
  : base (name)  
  {  
      this.referrerName = referrerName;  
  }  
  private string referrerName;  
  private uint highCostMinutesUsed;  

对我来说,似乎变量“referrrerName”正在被“初始化”之后被引用为构造函数中的传递参数。

public Nevermore60Customer(string name, string referrerName)

我是谁,如果是这样的话怎么样?或者,如果我是正确的并且在构造函数中引用它之后进行初始化,那么它是如何实现的?

由于

6 个答案:

答案 0 :(得分:4)

与构造函数相比,变量声明的位置与C#无关。

如果参数和字段的名称不同,那么讨论会更容易:

class Test
{
    public Test(string parameter)
    {
        this.field = parameter;
    }

    private string field;
}

基本上,在调用构造函数之前,字段“存在”。如果使用初始化程序声明该字段,如下所示:

private string field = "default value";

然后初始化程序在构造函数之前运行,即使它可能在源代码中跟在它之后。

答案 1 :(得分:2)

构造函数参数不是字段的别名。它隐藏了字段名称,此代码不起作用:

public Nevermore60Customer(string name, string referrerName) : base (name)  
  {  
      referrerName = referrerName;    // bad
  } 

使用“this”。前缀,您可以告诉编译器将参数值赋给字段。这是一种非常常见的模式,避免不得不为争论提出另一个名称。或者做一些尴尬的事情,例如在字段名称前面添加一个下划线。

答案 2 :(得分:0)

不确定我理解这个问题。您的构造函数有一个strign参数,referrerName,您正在为一个私有类变量赋值,也称为referrerName。在初始化之前我没有看到this.referrerName被引用的位置?

答案 3 :(得分:0)

this.referrerName指的是声明为private string referrerName;的类成员 referrerName右侧的=是构造函数的参数。

答案 4 :(得分:0)

无论您如何订购类的私有成员和构造函数,私有成员将始终首先被初始化。

答案 5 :(得分:0)

C#是一种面向对象的语言,你似乎把简单的C程序语言概念与C#混为一谈。与C不同,在C#中,只要实例在访问之前被初始化并且在范围内,声明的顺序就无关紧要。