【问题标题】:Naming Convention for "var" in C#C#中“var”的命名约定
【发布时间】:2018-01-12 10:26:21
【问题描述】:

如何正确初始化具有var 类型的类?我经常看到这个版本:

var converter = new Converter();

类的实例应该用 PascalCase 来写,对吧?为什么var 不一样?

【问题讨论】:

  • var 不是Converter 的实例变量。我建议阅读文档。这里converter 是变量,var 只是实际类型Converter 的别名。
  • C#中的保留字是小写的,var是保留字,不是类型。话虽如此,stringint 这样的类型也是小写的。
  • @Steve internal and private fields are not covered by guidelines 但是,根据我的经验,通常的做法是使用驼峰式大小写。
  • @Steve 我更喜欢为类级别的私有添加下划线,但是是的,camelCase 也是。

标签: c# naming-conventions


【解决方案1】:

我认为您误解了 var 的含义,并混淆了类、引用和 var 是什么(以及每个的命名约定)。

那么var 是什么? From docs:

在方法范围内声明的变量可以有一个隐式的“类型”变量。隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但编译器确定类型

来自Implicitly Typed Local Variables

var 关键字指示编译器从初始化语句右侧的表达式推断变量的类型

所以在这种情况下var converter = new Converter();:

  • 编译器将var 确定为Converter
  • 您正在创建一个名为 converter 的引用 - 应该使用 camelCaseing 命名。
  • 引用的显式类型是 Converter - 应该使用 PascalCasing 命名。

var converter = new Converter(); 等同于写Converter converter = new Converter();


在 C# 中,var 用于您不知道显式类型(例如匿名类型)的情况或作为一种简单的编写方式:

Dictionary<SomeTpye, List<SomeOtherType<AndSomeGenericParameter>> variable = 
    new Dictionary<SomeTpye, List<SomeOtherType<AndSomeGenericParameter>>();

这样:

var variable = new Dictionary<SomeTpye, List<SomeOtherType<AndSomeGenericParameter>>();

因为它是类型的“别名”,而不是类型本身,所以它遵守语言关键字(而不是类型)的约定,并且以小写形式书写。

【讨论】:

  • 但我不会写其他的:“Converter Converter = new Converter();” ?为什么是“var converter = new Converter();”然后?如果它是“转换器”类型,为什么它会很小?
  • @Mike - 请参阅更新 + 从文档中添加的描述中 var 的实际含义
  • @Mike 嗯...我不明白 - 你对对象的名称感到困惑吗?大写而不是小写?
  • 感谢 Gilad 这对我来说很有意义。然而,还有一个问题:对类的引用总是以小写字母开头还是仅在使用“var”时才使用?
  • @Mike - 按照惯例,变量/参数是用 camleCase 编写的 - 无论使用或不使用 var。类使用 PascalCase 命名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多