类的构造器

试试分析下面这段代码,一个很简单的继承的代码:

using System;
class A
{
 public A()
 {
  Console.WriteLine("i am a");
 }
}
class B:A
{
 public B()
 {
  Console.WriteLine("i am b");

 }

 
}
class Test
{
 static void Main()
 {
  B b=new B();
 }
}
这段代码很简单,打印的结果是先调用A的构造器,再调用B的构造器。
但是我们再插入一个有带参数的构造器:

using System;
class A
{
 public A()
 {
  Console.WriteLine("i am a");
 }
 public A(int i)
 {
  Console。WriteLine("i take a parm")
 }
}
class B:A
{
 public B(int j)
 {
  Console.WriteLine("i am b");

 }

 
}
class Test
{
 static void Main()
 {
  B b=new B();
 }
}
在这里编译结果是先调用A的无参构造器,接下来我们屏蔽掉A无参构造器,编译,就会出错,这个是为什么呢,我们不是会自动生成一个无参构造函数吗。
是的我们是会自动生成一个无参的构造器,但是当我们的A中带有一个有参构造器的时候它不会再生成了所以就有错误了。同样如果此时A中什么都没写,也会出错,想想看,为什么呢
所以我们写类的时候要写上一个无参的构造器,这是好习惯
当我们要求使用A中的有参构造器的时候怎么办呢,很简单用base(i)
就是调用A中有一个参数的构造器。我们在类的设计中经常涉及到this。base所以要好好掌握
这是因为类的无参构造器只是编译一次   
 
静态构造器:只会执行一次
using System
class A
{
  public staic int i= 11;

}
class test
{
   static void Main()
{
}
}
到这里,A类为了给静态成员初始化,会自动创建一个静态构造器
using System
class A
{
  public staic int i;
  static A()
{
  Console.WriteLine("static ");
}

}
class test
{
   static void Main()
{
 Console.WriteLine(A.i);
}
}
这里我们没有对 A实例化,但是我们使用了它的i;这里会先打印 static 再打印出 i的值,如果有的话
如果我们再实例化一个类  A a1=new A();静态构造器还是只是执行一次。
所以说静态构造器不能被重载,默认为private类型,无参数。

posted on 2007-12-09 15:40  蚂蚁跳楼  阅读(198)  评论(0)    收藏  举报