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

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

string s="God is great!"; 

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

 Employee e = "Saurabh"; 

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

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

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

 object x = "string literal"; 

这很好,因为从stringobject的隐式引用转换。 同样你可以写:

 XNamespace ns = "some namespace"; 

因为存在从字符串到XNamespace的隐式转换 。

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

因为它们不是同一类型,如果你定义一个TypeConverter,那么这将起作用。

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

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

 Employee e = "Saurabh"; 

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

 object x; x = new Employee(); x = "Hello World!";