2010-03-16 29 views

回答

14

该代码会工作。基本上,一个字符串文字的类型是string - 即它的值是一个字符串引用(以及在那个字符串引用的字符串)。可以,如果有两种类型之间的变换的一种类型的值仅分配给另一种类型的可变 - 无论是用户定义的或内置在这种情况下,没有转换从stringEmployee,因此错误。

相反,一些其他的答案,类型不必须是相同 - 比如,这是好的:

object x = "string literal"; 

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

XNamespace ns = "some namespace"; 

因为有implicit conversion from string to XNamespace

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

+0

+1使用'XNamespace'进行隐式转换的绝佳示例。 – 2010-03-16 14:51:00

+0

很好的解释..我被拒绝了,因为这个问题,它真的尴尬,我没有回答这个基本的问题,我搞砸了! – TalentTuner 2010-03-16 14:53:16

+1

我发现很难相信微软会问这么简单的问题(尽管它们很棘手)。但与谷歌面试相比,这没什么。 – JonH 2010-03-16 14:56:24

2

引用类型是不可转让的,除非它们是完全相同的类型(这被称为类型安全)。第一个示例的工作原理是将字符串文字分配给类型为System.String的变量。第二个示例不起作用,因为您正在将字符串文字分配给Employee类型的变量。类型必须匹配或可从右向左分配才能赋值工作。

+0

相同类型或子类型。您可以将DeveloperEmployee分配给员工(如果DeveloperEmployee从员工继承)。 – dbemerlin 2010-03-16 14:49:22

+0

对 - 这就是我指定的。 – 2010-03-16 14:50:28

+0

为什么你要说“引用类型不能赋值,除非是相同的类型”?类型安全规则对于值类型是相同的,为什么混淆更多? – Marek 2010-03-16 14:51:53

2
Employee e = "Saurabh"; 

不能简单地工作,因为它们是不同的类型。如果你有一个字符串的隐式转换到Employee

+1

向Employee添加一个隐式运算符,这将起作用。 假设Employee有一个接受字符串参数的构造函数: public static implicit operator Employee(string name) { return new Employee(name); } – 2010-05-05 10:44:06

2
object x; 

x = new Employee(); 

x = "Hello World!"; 
相关问题