Syl*_*gue 20 .net c# string icloneable
令人惊讶的是,String.Clone()
不会像返回的那样返回字符串的副本String.Copy()
.相反,它返回'this'
原始字符串.
我想了解为什么.Net Framework团队选择这样做.
根据MSDN:
ICloneable接口[...]要求您的Clone方法实现返回当前对象实例的副本.
String.Clone()
显然不遵循本指南.
我知道字符串是不可变的,但如果不变性是这里的原因,String.Copy()
也会返回,this
但事实并非如此.
当然,这是一个相当理论化的问题.
你怎么能发现差异?只能通过比较两个引用来使用object.ReferenceEquals
.但是通过对字符串的任何语义操作,你都无法区分它们.
通过引用比较字符串几乎总是一个错误,因为你很少依赖实习发生或不发生.
这个问题不仅适用于String
.如果你有一个不可变Point
类,为什么要从中返回一个新对象Clone
?没必要.
IClonable
很少使用,很少使用.如果您希望公开类的用户获取给定实例的副本,则根本不需要继承IClonable
.
归档时间: |
|
查看次数: |
963 次 |
最近记录: |