有一问题:想在类的构造函数中传入多个变量,其中有几个变量想有默认值,但C#不支持,只能重载。
class C1
{
  public C1()
  {
    C1("");
  }
  public C1(String s)
  {
    .....
  }
}但是在编译的时候报错,此想法如何实现?

解决方案 »

  1.   

    class C1
    {
      public C1() : this("")
      {  }
      public C1(String s)
      {
        .....
      }
    }
      

  2.   

    class C1
    {
      private string str = string.Empty;
      public C1()
      {
        
      }
      public C1(String s)
      {
        str = s;
      }
    }
      

  3.   

    1楼正解,调用别的构造函数要用this
    public C1() : this("")调用基类构造函数用base
      

  4.   

    注意重载不能发生签名一致的情况。
    class C1
    {
      private string str ;
      private string name;  public C1()
      {
        
      }  public C1(string s)
      {
        str = s;
      }
      
      public C1(string name)
    {
        this.name=name;
    }
    }上面就会发生错误
      

  5.   

    构造函数比较特殊,因为它是由系统自动调用的,所以其不能在任何方法中被调用,即使是调用方法也是构造函数。但是有时候又在构造函数中调用另一个签名的构造函数,所以C#提供了一种语法,即this。显然构造函数不能被任何函数所调用是有道理的。如果能被调用,那他的返回值该是多少?是不是新创建一个实例?  public C1()
      {
        C1("");
      }这样是创建一个实例还是两个实例?
    C1("")返回值是多少?
    如果创建两个实例,那么通过new那边的代码得到的是什么?
      

  6.   

    to viena(维也纳N02) :调用别的构造函数要用this
    调用基类构造函数用base,
    在什么地方可以找到这样的资料?
      

  7.   

    我记得MSDN WEBCAST上有篇讲到过这个东东,
    我找找再贴
      

  8.   

    C#语言规范里面就能找到,VS的帮助里面也有,多看帮助很多问题就没了……
      

  9.   

    TO Javesun:
    建议您安装Visual Studio同时安装MSDN,这样的问题90%可以从那里找到答案。
      

  10.   

    class   C1 

        private   string   str; 
        public   C1() :this("")
        { 
            
        } 
        public   C1(String   s) 
        { 
            str   =   s; 
        } 
    }
    这样在通过C1()创建对象时也能执行C1(String s)中的初始化代码,C1(String s)中可能不仅仅是设置变量的默认值,还会有一些其他的初始化代码,如在C1()中也要执行相同的初始货代码,为了避免重复,可在C1()后面加this("")来使用C1()创建对象时也能执行C1(String s)中的初始化代码,这才是在某一构造函数中使用this进行调用其他构造函数的原因.