你的意思是引用类型声明也不用new关键字吗?

解决方案 »

  1.   

    可以用new创建,但你要注意到string没有接受一个string作为参数的构造函数!也就是:
        string str = new string("hello"); //是非法的。

        string str = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
        //是合法的。
     
    string是.NET的原始(Primitive)类型之一,和int/long一样,string的部分操作不是通过类库的函数,而是CLR的指令来完成的,比如Ldstr/Stloc(Stfld)指令就可以完成string负值的工作,不需要特别的构造函数。
      

  2.   

    by the way: valuetype不是也可用new创建吗?
    这和具体操作的类型没有关系,new只是C#调用ctor/创建对象的一种语法手段,编译器可以针对不同的情况选择适当的行为——但bottomline是你写的构造函数的确存在。
      

  3.   

    一, saucer(思归) : 编译器会帮你加的
    另外,根据MSDN文档 String的Construct 被Overload了很多次,下面是其列表:[C#] public String(char[]);
    [C#] public String(char, int);
    [C#] public String(char[], int, int);
    [C#] unsafe public String(char*);
    [C#] unsafe public String(char*, int, int);
    [C#] unsafe public String(sbyte*, int, int, Encoding);
    [C#] unsafe public String(sbyte*);
    C#中使用指针时必须申明为unsafe的