Code Bye

为什么string的构造,可以=“abc"但是不能new string("abc")

        static void Main(string[] args)
        {
            string s = new string("abc");
            string s2 = "abc";
        }

第一行有编译错误,第二行是可以的,这两种构造不都是new了一个新的string对象,值是abc吗。为什么一个是编译错误,一个没问题呢?
谢谢

解决方案

5

构造函数支持什么类型参数,你应该看看人家构造函数的那些声明。不应该本人乱想。

5

假如你认为”abc”就应该用”abc”作为构造函数的参数,这又何必调用构造函数呢?

5

CLR用一种特殊的方式来通过常量字符串构造字符串变量,不是通过newobj的方式构造,C#也不支持new来新建string,可参考CLRviaC#一书

5

给你找了段string类的实现,全部构造函数都有了
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
{
    public static readonly string Empty;
    [CLSCompliant(false)]
    public String(char* value);
    public String(char[] value);
    [CLSCompliant(false)]
    public String(sbyte* value);
    public String(char c, int count);
    [CLSCompliant(false)]
    public String(char* value, int startIndex, int length);
    public String(char[] value, int startIndex, int length);
    [CLSCompliant(false)]
    public String(sbyte* value, int startIndex, int length);
    [CLSCompliant(false)]
    public String(sbyte* value, int startIndex, int length, Encoding enc);

5

string s = new string(“abc”.ToArray());

5

你应该看String类中有没有这样的构造函数,Java中可以这样:String s = new String(“abc”);
虽然大部分语法非常相似,但不完全一致。

5

既然是由系统定义了string对象,那它的构造函数就已经确定了,只能选择.

5

看的java吧

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么string的构造,可以=“abc"但是不能new string("abc")