代码之家  ›  专栏  ›  技术社区  ›  TalentTuner

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

  •  4
  • TalentTuner  · 技术社区  · 15 年前

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

    string s="God is great!";
    

    但同样的,如果我声明类,比如employee,这是一个引用类型,为什么下面的代码不起作用?

    Employee e = "Saurabh";
    

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

    5 回复  |  直到 15 年前
        1
  •  14
  •   Jon Skeet    15 年前

    如果将字符串隐式转换为 Employee . 基本上字符串文字是 string -也就是说,它的值是一个字符串引用(并且是一个内部引用)。如果两种类型之间存在转换(用户定义的或内置的),则只能将一种类型的值赋给另一种类型的变量。在这种情况下,没有从 一串 员工 ,因此出现错误。

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

    object x = "string literal";
    

    这很好,因为有一个隐式的引用转换 一串 object . 同样,你也可以写:

    XNamespace ns = "some namespace";
    

    因为有一个 implicit conversion from string to XNamespace .

    回答第二个问题:查看.NET中的类型是值类型还是引用类型… struct enum 类型是值类型;其他所有类型(类、委托、接口、数组)都是引用类型。这不包括指针类型,它们有点不同:)

        2
  •  4
  •   heisenberg    15 年前

    因为它们不是同一类型,如果您定义了一个类型转换器,那么就可以了。

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

        3
  •  2
  •   Andrew Hare    15 年前

    引用类型不可赋值,除非它们是完全相同的类型(这称为类型安全)。第一个示例之所以有效,是因为您将字符串文本赋给类型为 System.String . 第二个示例不起作用,因为您正在将字符串文本赋给类型为 Employee . 类型必须匹配或可从右到左进行赋值才能工作。

        4
  •  2
  •   Otávio Décio    15 年前
    Employee e = "Saurabh";
    

    不会仅仅因为它们是不同类型的就工作。

        5
  •  2
  •   Robin Day    15 年前
    object x;
    
    x = new Employee();
    
    x = "Hello World!";