如果string是值类型,我认为它是,为什么以下声明是合法的:
struct Refsample<T> where T : class
RefSameple<string>; //why is it legal?
深入研究C#,第75页
答案 0 :(得分:2)
System.String是一种引用类型,尽管它具有值类型的一些特征。
答案 1 :(得分:2)
string是不可变引用类型。
你想说吗?
struct Refsample<T> where T : class
struct本身是值类型,但它可以包含引用类型。
存储在内存堆栈中的值类型变量,但引用类型变量具有指向堆的内存地址。
e.g。
struct Refsample<T> where T : class
{
// stored in the stack as well.
public int Age;
// memory address pointing to the heap stored in the stack,
// but the actual object is stored in the heap.
public string Name;
// same as string above if T was reference type;
// otherwise, if value type, same as Age above.
public T SomeThing;
}
答案 2 :(得分:1)
String实际上是行为的引用类型,就像值类型一样。这就是为什么你可以测试一个字符串的null,你不能为int,bool等等。好吧,你可以,但你只会得到默认值0,false等。
答案 3 :(得分:1)
System.String是引用类型而不是值类型。