根据我的问题 - 请使用以下代码:
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)
我是谁,如果是这样的话怎么样?或者,如果我是正确的并且在构造函数中引用它之后进行初始化,那么它是如何实现的?
由于
答案 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#中,只要实例在访问之前被初始化并且在范围内,声明的顺序就无关紧要。