在msdn上 值类型主要由两类组成 结构 枚举 结构分为以下几类 Numeric(数值)类型 整型 浮点型 decimal bool 用户定义的结构 也就是string属于引用类型但是实际使用中 class Program { static void StringCon(string str) { str=New String; } public static void Main(string[] args) { ConsoleWriteLine(Hello World!); // TODO: Implement Functionality Here string oldstr =str; ConsoleWriteLine(before:{}oldstr ); StringCon(oldstr ); ConsoleWriteLine(after:{}oldstr ); ConsoleWrite(Press any key to continue ); ConsoleReadKey(true); } } 输出beforestr afterstr 也就是没有引用类型的应该有的表现这是为什么了? 实际上net设置string有个事实就是string一旦建立他的值是不可改变的而当将一个已经存在的字符串赋予新值的时候实际上在次过程中分配了一个新字符串(原有的字符串将被GC回收) static void StringCon(string str)// 相当于string str =oldstr // str是oldstr的一个副本他们只是指向相同的地址 { str=New String;// 相当于string str =new string(New String;) // str现在的地址改变了而oldstr还是原先的地址 } 所有string在当作参数传递是有值类型的表现但是实际还是引用类型 |