我们有Object和ValueType....和String....
String派生自object,但它是不可变的.它是否属于自己的类型,因为它不像其他对象一样?它是唯一具有这种不可变行为的对象吗?是运行时,编译器还是库定义它?在.Net还有其他类似的案例吗?
编辑:是的,我也创建了在构造之后不允许更改的类; 不可变对象.但是字符串不比这更特别吗?
string是一种参考类型.还有很多其他不可变类型,你可以创建自己的类型:只是不提供任何改变状态的成员!这是一个例子:
public class Int32Wrapper
{
private readonly int value;
public int Value { get { return value; } }
public Int32Wrapper(int value)
{
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,string也重载==和!=,覆盖Equals和GetHashCode等等......所有这些都可以在自己的类型做了.
string确实有一些真正的特殊属性:
new String(new char[0])反复打电话,你每次都会得到相同的参考