String与string的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/david_520042/article/details/4258854

0.  问题:
1. C#到底是什么时候传引用?什么时候传值?
2. String传值还是传引用
3. string和String有什么区别?
4. String为什么是Immutable,怎么实现的?

以下查询结果以及我的理解:

1. C#到底是什么时候传引用?什么时候传值?
传值的情况 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool
传引用的情况:class、Delegate、Interface

当使用操作符"="以及函数传参数的时候:
     传值的结果是把原对象复制了一份,接收者指向原对象。
      传引用的结果是直接让接收者指向原对象。

 

有人说,我硬要把值当引用传怎么办?

a、用ref关键字

b、用数组,数组是class

c、凉拌:)

2. String传值还是传引用
C#的String声明是class String,当然是传引用。

不过,之所以有这个疑惑,多数是因为这个情况:

string a = "aaa";

string b = a;

b = "bbb";

或者是这么几行代码:

public void Swap(string s1, string s2)

{

    string temp=s1;

    s1=s2;

    s2=temp;

}

这时候结果一打印,结果发现a的值还没有变,Swap也没有成功,这时候就会有幻觉:是不是没有传引用啊?

呵呵,string不会这么粗暴的打乱“声明为class就是传引用”这种规则的。

分析一下:

string a = "aaa"; //==> a----->new String("aaa")

string b = a;        //==> b----->a, 传引用

b = "bbb";          //==> b----->new String("bbb"), 传引用,b指向了一个新的字符串,a并没有变。

 

Swap函数也是这样,比如说传了a, b进去(a="aaa", b="bbb"),

   //s1----->a, s2----->b

    string temp=s1;//temp----->s1----->a

   s1=s2;              //s1----->s2----->b;

   s2=temp;          //s2----->temp----->a

结果是,s1和s2确实是Swap了,但是这种结果并不会影响到a和b


3. string和String有什么区别?

MSDN中对string的说明:string is an alias for String in the .NET Framework

呵呵string是String的别名而已,都是一家。


4. String为什么是Immutable,怎么实现的?
immutable:对象一旦生成不可改变

关于怎么实现的,在明白了问题2之后很好办,只要不提供任何修改自己成员变量的方法就可以了。顺便声明为sealed,防止不清楚的后来者违反规定:)

String每个看似修改了成员变量的方法,事实上都返回了一个新的String。

比如String.Replace函数,事实上并没有改变原来的串,这也是为什么只有让str = str.Replace( foo, bar )才真正完成替换的原因。

Stringstring区别是什么?

02-08

我在MSDN上看到的是:rnPlatform SDK: Windows User Interfacernrn[color=#FF6600]String[/color]rnThe String structure depicts the organization of data in a file-version resource. It contains a string that describes a specific aspect of a file, for example, a file's version, its copyright notices, or its trademarks. rnrnThis structure is not a true C-language structure because it contains variable-length members. This structure was created solely to depict the organization of data in a version resource and does not appear in any of the header files shipped with the Microsoft® Platform Software Development Kit (SDK). rnrnstruct String rn WORD wLength; rn WORD wValueLength; rn WORD wType; rn WCHAR szKey[]; rn WORD Padding[]; rn WORD Value[]; rn; rnMembersrnwLength rnSpecifies the length, in bytes, of this String structure. rnwValueLength rnSpecifies the size, in words, of the Value member. rnwType rnSpecifies the type of data in the version resource. This member is 1 if the version resource contains text data and 0 if the version resource contains binary data. rnszKey rnSpecifies an arbitrary Unicode string. The szKey member can be one or more of the following values. These values are guidelines only.rnrnrn而[color=#FF0000] string[/color]rnstringrntypedef basic_string string; 这个定义是什么意思?? 告诉一下rnrnrnrn关于String的n多方法怎么没有呢?rn顺便请说一下:typedef basic_string string; 怎么用?既然是C++的标准东西,我在C++Builder环境中用 string a;怎么提示没有定义呢?rnrnrnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试