重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
昨天写代码,不经意就把引用类型和值类型比较的不同忘记了,有必要记下来提醒自己,以免以后犯一样的错误. 先贴上自己写的错误代码 Object entryId ="entryid"; var result =sourceDynamicObject.where (o=>o.GetDynamicObjectItemValue
C#有以下一些引用类型: 数组(派生于System.Array) 用户用定义的以下类型: 类:class(派生于System.Object); 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]); 委托:delegate(派生于System.Delegate)。 object(System.Object的别名); 字符串:string(System.String的别名)。 可以看出: 引用类型与值类型相同的是,结构体也可以实现接口; 引用类型可以派生出新的类型,而值类型不能; 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型); 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。 对于最后一条,经常混淆的是string。我曾经在一本书的一个早期版本上看到String变量比string变量效率高;我还经常听说String是引用类型,string是值类型,等等。例如: string s1 = "Hello, "; string s2 = "world!"; string s3 = s1 + s2;//s3 is "Hello, world!" 这确实看起来像一个值类型的赋值。再如: string s1 = "a"; string s2 = s1; s1 = "b";//s2 is still "a" 改变s1的值对s2没有影响。这更使string看起来像值类型。实际上,这是运算符重载的结果,当s1被改变时,.NET在托管堆上为s1重新分配了内存。这样的目的,是为了将做为引用类型的string实现为通常语义下的字符串。
通过上面的介绍,下面的结果就很明显
创新互联专业为企业提供三元网站建设、三元做网站、三元网站设计、三元网站制作等企业网站建设、网页设计与制作、三元企业网站模板建站服务,10年三元做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。string s1= "abc";
string s2="abc";
String s3 = new String("abc");
String s4 =new String("abc");
s1==s2 true
s3==s4 false
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。