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吧