Effective C#笔记1-2

本文介绍了C#编程中隐式类型的优势,如代码简洁和效率提升,以及运行期常量与编译器常量的区别,包括它们的适用场景和注意事项。特别强调了在不同情况下的正确使用方式。
摘要由CSDN通过智能技术生成

前言:

《Effective C#》是Effective系列又一力作,旨在介绍C#语言的代码技巧。为什么要学?C#语法和C++、Jave相似,初学者会代入其他语言的代码习惯,但C#自身的特性决定它拥有特殊的技巧。就像书中的前言:“为什么要改变代码习惯?因为改后更好用”。

这个系列会有详有略地介绍书中让我印象深刻的内容,希望能帮到和我一样在C#的学习道路上的新手与老手。本文是第一部分,涵盖书中1、2条。

目录

前言:

1. 优先使用隐式类型的局部变量

(1)代码更简洁。

(2)效率更高

(1)不能作为全局变量,只能是局部变量

(2)其他情况

2. 运行期常量与编译器常量

区别

修改不等于重新赋值

应用


1. 优先使用隐式类型的局部变量

作者举了很多例子,但归根结底就是一句话:编译器比程序员想象的聪明,会自动选择最合适的变量类型,只需要给变量取一个好名字,让人一读到就知道这个变量的含义。有2种好处

(1)代码更简洁。

一般情况下,赋值号右侧表达式可以确定类型,如var cnt = 3; 或var time = DateTime.Now。这里的cnt会被自动判定为int类型,time则是DateTime类型。用var替代int和DateTime,代码更加清晰简洁,发挥出了静态类型的优势。

注意,用隐式类型的局部变量并不是动态类型!隐式类型会在编译期确定,报错也会在运行期之前。

(2)效率更高

先举例:C#的Linq模块有两种接口,IEnumerable和IQueryable,两种接口的查询机制不一样。如果你比较菜,不是很懂两者的区别,或者脑子一热用错了,你就可能喜提超长运行时。但如果用隐式类型,编译器是不会犯这种错误的。

所以,为了新人友好地提升代码效率,推荐隐式类型。

但隐式类型也有两个不足:

(1)不能作为全局变量,只能是局部变量

也就是说,var只能用在方法内部。类内部方法外部、类外部,还是老老实实写出完整的数据类型吧。

(2)其他情况

有些变量类型需要明确声明的,不能用隐式类型

2. 运行期常量与编译器常量

C#有两种常量,运行期常量用readonly修饰,编译期常量用const修饰。

区别

(1)编译期常量会直接嵌入代码,而运行期常量则是引用这个readonly量

(2)编译器常量只能表示值类型,如int\float\char\string\enum,且只能用数字、字符串、null给const常量赋值。运行期常量类型不受限制。

(3)const类型的变量修改后,需要重新编译才能生效,而readonly类型的变量不需要重新编译。修改const常量相当于修改接口,修改readonly常量相当于修改实现细节。

修改不等于重新赋值

哪怕一个实例被声明为readonly,我们依旧可以可以在外部(非声明和构造函数)对readonly的变量进行修改内容操作。只要不重新赋值就行。

应用

(1)把某个值在编译器固定下来,用编译器常量。如:版本号

(2)性能要求高,用编译期常量

(3)除此之外用更灵活的readonly

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值