好的,一些构造函数怎么样?
// a sample base class
class KBase {
public readonly int value; // making it readonly means it can only be assigned to once, and that has to happen during a constructor.
public KBase ( int startValue ) { value = startValue; }
}
class KHandler : KBase
{
public readonly string name = "wut";
// this is a parameterless constructor, whose implementation invokes another constructor ( the one below ) of this class
public KHandler () : this ( "huh" ) {
}
// this is a 1 parameter constructor, whose implementation ensures KBase is properly initialized, and then proceeds to initialize its part of the new instance.
public KHandler ( string val ) : base ( 3 ) {
name = val;
}
}
class Test {
static void Main()
{
// this next line calls the parameterless constructor I defined above
KHandler handler = new KHandler();
// and this next line calls the 1 parameter constructor
KHandler handler2 = new KHandler("something else");
Console.WriteLine("All Good 1"+handler.name);
Console.WriteLine("All Good 2"+handler2.name);
}
}
我认为你想要构造函数的基本机制,在分配新类实例并“归零”后,它们在稍微特殊的环境中运行。特殊环境是编译器/语言确保正确初始化所有基类和字段,并且允许在构造期间(仅)分配给只读成员。
构造函数可以调用基类构造函数来正确初始化这些基类;构造函数还可以在继续之前调用同一类的另一个构造函数。
每个类可以有多个构造函数——就像我上面的例子一样。如果您不指定构造函数,则编译器会有效地为您插入一个空白的无参数构造函数。如果您不想要这种行为,那么添加您自己的构造函数(任何参数列表)会取消编译器/语言自动创建空白无参数构造函数。(如果您添加了自己的参数化构造函数并且仍然想要无参数构造函数,则必须自己将其添加回来。)
第一个构造函数(无参数的)作为第一个 new KHandler() 的结果调用,第二个构造函数由第二个 new KHandler(字符串)调用。
一旦构建,对象就被认为可以使用了。无论如何,搜索构造函数的一般构造,您将获得更多信息。