我们知道字符串是引用类型,所以我们有
string s="God is great!";
但是在同一个注释中,如果我声明类说Employee是一个引用类型,为什么下面的代码不起作用呢?
Employee e = "Saurabh";
2-我们如何确定类型是引用类型还是值类型?
答案 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!";