![]() |
1
17
(除了你看到单词
|
![]() |
2
9
var变量由编译器推断,它们实际上只是语法上的糖分,两者之间没有区别:
和
在编译的代码中。 添加它们的目的是允许匿名类型,例如
是的,var变量在编译时识别出类型不匹配,编译器在编译时动态地为它们创建一个类。例如,以下内容无法编译:
|
![]() |
3
4
正如其他人所说,
为代码生成的IL使用
至于何时使用
基本上都是关于可读性的:如果代码更容易用
|
![]() |
4
3
简单的回答:与正常变量完全相同。
|
![]() |
5
1
由于var是对显式类型或匿名类型的推理,它的内存将被分配到相同的位置吗?它的对应类型将是var,或是var,在堆上被普遍创建并被访问,就像它是一个对象一样。 关于var,重要的是编译器在编译时将var语句更改为实际类型,因此:
将更改为:
…由编译器编写。因此,存储这些类型的内存位置也没有什么不同。var本质上是句法上的糖。因此,值类型的方法局部声明将存储在堆栈上,引用指针将存储在堆栈上,引用对象位于堆栈上。 一旦您将变量声明为var,因为编译器会将其转换为完整的类型,所以您就不能动态地更改类型:
…无效,因为它已声明为Int32。 匿名类型遵循类似的行为,即编译器在编译期间创建类型。 “最后,有没有一种情况,您可以考虑在设计时在哪里知道一种类型,但无论如何使用var都是明智的?” 就我个人而言,我遵循一个简单的模式: 对于原语,我总是将类型:
对于复杂类型,我主要这样做:
对于LINQ结果,我坚持使用var:
对于方法,如果方法描述了返回的类型,那么我将使用var。
然而,更复杂的方法名称,我会将实际类型:
每个开发人员都会找到他们喜欢的东西,选择权属于你。因为var实际上只是一个设计时的东西,它的所有句法糖分。 |
![]() |
Michael Runzler · 动态类型化方法中的奇数型推理 7 年前 |
![]() |
K.Os · Kotlin和RxJava类型推断失败 7 年前 |
![]() |
Crazycolorz5 · (^)上的类型推断问题 7 年前 |
![]() |
Josh Stone · Scala类型推断错误 7 年前 |
![]() |
LazyHatIQ · 类型脚本类型推断、扩展语法和多类型返回 7 年前 |