C# - 如何创建一个构造函数,它们在声明之前接受变量?
基于我的问题 - 把下面的代码:C# - 如何创建一个构造函数,它们在声明之前接受变量?
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)
我是否在工作,如果是的话如何?或者如果我是正确的,并且在构造函数中被引用之后它正在被初始化,那怎么可能?
谢谢
变量声明与构造函数比较的位置与C#无关。
这将使它更容易些讨论,如果你的参数和字段有不同的名称,但:
class Test
{
public Test(string parameter)
{
this.field = parameter;
}
private string field;
}
基本上领域的“存在”的构造函数被调用之前。如果字段声明了一个初始化,这样的:
private string field = "default value";
那么初始化运行之前的构造,即使它可能会后的源代码内。
不知道我明白这个问题。您的构造函数具有一个strign参数referrerName,您将其分配给一个私有类变量,也称为referrerName。我没有看到它的初始化之前引用this.referrerName?
this.referrerName
指声明为private string referrerName;
的referrerName
到=
右侧的类成员为参数给构造。
无论您如何订购类的私有成员和构造函数都无关紧要,私有成员将始终首先被初始化。
C#是一种面向对象的语言,您似乎将C语言过程语言的概念与C#混淆了。与C不同,在C#中,只要实例在访问之前初始化并且在范围内,声明的顺序就不重要。
那么,声明的顺序*可以*重要。特别是,初始化器是按照文本顺序执行的......当你有部分类时,它会变得不明确。当然,这依赖于这个几乎总是一个错误,但它可以有所作为。 *方法*(或构造函数或属性等)的位置没有定义的差异,我知道。 – 2010-06-21 12:05:26
但它们都在构造函数之前初始化并可用。 – 2010-06-21 12:20:54
构造函数的参数是而不是该字段的别名。它隐藏字段名称,此代码将不起作用:
public Nevermore60Customer(string name, string referrerName) : base (name)
{
referrerName = referrerName; // bad
}
通过使用“this”。前缀,您可以告诉编译器将参数值分配给该字段。这是一个非常普遍的模式,避免为该论点提出另一个名称。或者做一些尴尬的事情,比如用下划线前缀字段名称。
在声明你的“NeverMore60Customer”类并且使用F11的代码上放置一个断点可能有助于说明这里发生了什么 – 2010-06-21 12:05:49