【问题标题】:what is 'named type'什么是“命名类型”
【发布时间】:2014-02-11 00:04:43
【问题描述】:

我经常在 C# 中遇到术语“命名类型”。什么意思?

【问题讨论】:

    标签: c#


    【解决方案1】:

    已用名称显式声明的类型。例如,您声明的任何类或结构都是命名类型。

    还有匿名类型,它们声明时没有名称,编译器会为该类型分配一个开发人员无法访问的名称。

    您可以阅读更多关于不同类型的types in C#

    【讨论】:

      【解决方案2】:

      这是指显式类型的变量,而不是那些具有匿名类型的变量。任何不是匿名类型的都是命名类型。

      随着(我认为).Net 3.0 的引入,匿名类型提供了一种方便的方法来创建包含一组 只读 属性的对象,而无需为此目的定义显式命名的类型。

      虽然匿名类型的实现也需要使用type inference(用于对象属性的类型化),但不要将匿名类型与Implicitly Typed Local Variables混淆,其中var 关键字将程序员从显式声明变量类型中解放出来,但编译器有效地提供了类型。 (大多数隐式类型变量不是匿名类型,因此是命名类型。只是编译器进行命名)。

      【讨论】:

      • 这是错误的。类型推断和匿名类型不相关。在某些情况下可以使用类型推断来排除泛型参数或使用 var 关键字。匿名类型是动态创建的未命名类型。
      • @recursive 谢谢!我阅读了这一点,并意识到我哪里出错了。类型推断通常用于匿名类型的情况,但是,这两个概念确实是完全分开的。我会相应地修正我的回应(或完全杀死它......)
      • Thks,你不需要这样做,downvote 是当之无愧的:我说得好,写得好,太快了!更重要的是,谢谢你今天教了我一些东西。
      【解决方案3】:

      任何不是Annonymous Type 的类型都是“命名类型”。

      【讨论】:

      • 根据您的定义,二维整数数组是一种命名类型。这真的有意义吗?如果有,它叫什么名字?
      • @Eric 感谢您阅读此问题。如果您觉得有任何遗漏或被误解,请多加说明。
      【解决方案4】:

      命名类型是您创建并命名的任何明确定义的类型(结构、类等)。

      例如:

      public class Foo
      {
         public string Bar{ get; set; }
      }
      

      在这种情况下,Foo 是一个命名类型。

      这与匿名类型相反,匿名类型通常是动态创建的:

      var MyFoo = new { Bar = "some text" };
      

      我刚刚创建了一个名为 MyFoo 的新对象。我们没有显式地给它一个类型名称,但我们已经隐式地给它一个字符串属性 Bar,其值为“some text”。

      【讨论】:

      • 从上面 MJV 的评论中,'Var MyFoo' 表示隐式类型变量。您提到的这种匿名类型如何?谢谢
      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多