为什么string是引用类型,但行为与其他引用类型不同?

时间:2010-03-16 14:43:34

标签: c# string

我们知道字符串是引用类型,所以我们有

string s="God is great!";

但是在同一个注释中,如果我声明类说Employee是一个引用类型,为什么下面的代码不起作用呢?

Employee e = "Saurabh";

2-我们如何确定类型是引用类型还是值类型?

5 个答案:

答案 0 :(得分:14)

如果您有从字符串到Employee的隐式转换,那么该代码将起作用。基本上,字符串文字的类型为string - 即它的值是一个字符串引用(以及一个实例)。如果两种类型之间存在转换(用户定义或内置),则只能将一种类型的值分配给另一种类型的变量。在这种情况下,没有从string到{{1}的转换因此错误。

与其他一些答案相反,类型不一定是相同 - 例如,这很好:

Employee

这很好,因为从object x = "string literal"; string的隐式引用转换。同样,你可以写:

object

因为有implicit conversion from string to XNamespace

回答第二个问题:查看.NET中的类型是值类型还是引用类型...... XNamespace ns = "some namespace"; struct类型是值类型;其他一切(类,委托,接口,数组)是一个引用类型。这是排除指针类型,有点不同:)

答案 1 :(得分:4)

因为它们的类型不同,所以如果你定义一个TypeConverter,那就可以了。

http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx

答案 2 :(得分:2)

参考类型不可分配,除非它们的类型完全相同(这称为类型安全)。第一个示例有效,因为您要将字符串文字分配给类型为System.String的变量。第二个示例不起作用,因为您要将字符串文字分配给类型为Employee的变量。这些类型必须匹配或从右到左分配,才能赋值工作。

答案 3 :(得分:2)

Employee e = "Saurabh";

不会仅仅因为它们属于不同类型而起作用。

答案 4 :(得分:2)

object x;

x = new Employee();

x = "Hello World!";