《C#高级编程》 读书心得1--核心C# 几点你可能没注意,但很基础的小东西。
这是本系列读书心得第一篇。
其实所谓核心C#也就是C#的语法基础,相信大家应该已经非常熟悉了,在这里说一下在书中看到,大家可能平时没有太注意到的。此篇比较基础,也是第一次写读书心得,请勿喷啊。
变量以及其作用域。
首先声明变量:可以直接用int i; 其实它是声明一个名为i 的System.Int32的一个实例。 像int, long这样的关键字都是指向.NET预定义类型,也就是说用他们声明的变量是他们所指向的.NET预定义类型的一个实例。在.net中一共有15个这样的预定义类型,13个值类型,2个引用类型(object和string)。如int 对应的System.Int32, long对应System.Int64。 就像大学的时候我们C语言的老师一直都说int变量的值范围为-32768~32767,是因为当时的C语言编译环境为16位。 还要强调一点就是string字符串在C#中为引用类型,也就是说一个string变量是存储在托管堆上的,而像int这样的值类型是存储在堆栈上。
我们在int上按F12跳转到定义就会看到它其实是一个结构体:public struct Int32, 所一它存储在堆栈上,而string的定义是public sealed class String是一个类。
在定义一个string a后,并没有为其初始化a的值为null,而int a后a默认为0。 再有string a="123" 声明了一个string类型,然后对其再次赋值a="456",会再次创建一个值为456的实例,而不是修改值为123的实例。int a=9之后int b=a 这样在内存中会生成两个值为9的int结构体实例在堆栈中。还有bool变量只接受true或者false,而不会接受0或者1不会对其隐式类型转换。bool变量的默认值为false。
关于int对应System.Int32,bool对应System.Boolean等其实都是结构,他们都是继承于System.ValueType, 而System.VauleType又继承与System.Object. 所以他们的实例都可以进行ToString()这样的操作。String就直接继承与System.object。
关于变量的作用域有这样一个有趣的事,请看下面两段代码
1 class Program1 2 { 3 private static void Main(string[] args) 4 { 5 int j = 20; 6 for (int i = 0; i < 10; i++) 7 { 8 int j = 30; 9 Console.WriteLine(j + 1); 10 } 11 } 12 }
1 class Program2 2 { 3 private static int j = 20; 4 static void Main(string[] args) 5 { 6 int j = 30; 7 Console.WriteLine(j); 8 return; 9 } 10 }
第一段代码运行后会报错,变量j重复定义。
而对于第二段,有人也会认为他会报错,但运行后会输出变量j 为30。 这是因为变量声明在类中,C#就认为它为类的字段,Main方法中的j为局部变量。在main方法中声明j局部变量后类中的字段j被隐藏,所以编译成功,如果要类级别上的j可以用Program2.j。但为了代码的可读性我们在代码中避免这样的写法。
关于常量 const 和readonly的区别。
先说常量,常量必须在声明时初始化,之后不可修改,常量的值必须在编译时就可以计算出来,不可以用一个变量中提取出的值来初始化常量。常量是静态的,但要是加上static关键字会报错。
而只读字段readonly,它要比const常量要灵活,他一般在生成实例,在构造函数中初始化,实例生成后其值也就不可变化了,所以自读字段的值只要在生成实例之前能够计算出来就是可以的。
预处理指令
书中列举了很多预处理指令,有很多之前都没有用过,但相信应该都有用过#region #endregion 去折叠一段代码。这里要说明一下#if DEBUG #else #endif(请注意,在C#预指令里是也是区分大小写的)。请看下段代码。
1 static void Main(string[] args) 2 { 3 Console.WriteLine("Always write"); 4 5 #if DEBUG 6 Console.WriteLine("Write When Debug"); 7 #else 8 Console.WriteLine("Write When Release"); 9 #endif 10 11 Console.ReadLine(); 12 13 return; 14 15 16 }
运行的话会看到效果,当选择DEBUG 模式进行调试的话,DEBUG就会为真,当选择Release的话,DEBUG就会为假。当然可能有的版本VS会要进行一下设置,右键点击项目,选择属性,“生成”选显卡里,选定“定义DEBUG常量”。这样DEBUG常量才会生效。此方法在调试一些登陆后后才可见的功能比较有用,调试的时候谁也不想每次登录这么麻烦吧。
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
转载于:https://www.cnblogs.com/heylon/archive/2012/10/27/2742175.html
《C#高级编程》 读书心得1--核心C# 几点你可能没注意,但很基础的小东西。相关推荐
- 文件和目录(二)--unix环境高级编程读书笔记
在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...
- 文件io(一)--unix环境高级编程读书笔记
unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...
- 高级IO(一)--UNIX环境高级编程读书笔记
在前面学习了文件IO,标准IO和终端IO,现在学习高级IO,UNIX中怎么有这么多的IO. 1.非阻塞IO 可以将系统调用分为两类:低速系统调用和其他.低速系统调用是可能会使进程永远阻塞的一类系统调用 ...
- APUE Unix环境高级编程读书笔记
.. 转载于:https://www.cnblogs.com/solitrarychen/p/5407536.html
- WCF 4 高级编程 - 读书笔记
第2章 服务契约与数据契约 在SOA架构中,契约提供了服务通信所必需的元数据.契约用来定义数据类型.操作.消息交换模式和消息交换使用的传输协议.契约通常是XML格式发布的.在WCF中,服务元数据通常是 ...
- unix进程的环境--unix环境高级编程读书笔记
1.进程的启动 进程总是从 main 函数开始执行的,main函数的函数原型如下: int main(int argc,char* argv[]); 当内核启动 c 程序时,使用一个 ...
- linux系统数据文件和信息--unix环境高级编程读书笔记
linux系统中的数据文件有很多,在这一章里介绍的主要内容是和系统有关的一系列文件,包括passwd,shadow,group,utmp,wtmp以及一些系统的相关信息和时间的相关操作. 1.pass ...
- 标准IO库--unix环境高级编程读书笔记
标准IO库是C语言提供的一个库,不光存在于linux中,在windows中也是有的.标准IO库和文件IO的不同是,标准IO库是对文件IO(即系统调用)的封装,并且在用户层添加了一些缓冲区. 文件IO的 ...
- 终端IO--unix环境高级编程读书笔记
终端IO部分整体上读了两遍,感觉这一部分的内容又乱又碎,不太好理解.读完了之后,仍然感觉什么也没有学到.先做一个肤浅的记录,等到以后要用到的时候,再回来补充. 1.终端IO的工作方式 终端IO有两种不 ...
最新文章
- Neumorphism.io一个神奇的网站,满足各种圆角矩形ICON图表立体化效果要求,这种样式的名称——新拟态
- Ubuntu18.04 误删/usr/bin/python3的解决方案
- java读取本地文件下载_java 读取本地的json文件
- Android Studio使用Lint进行代码检查
- MYSQL内置函数总结
- python操作php文件,python怎么操作文件
- linux下gcc编译使用opencv的源文件时报错的处理:undefined reference to symbol '_ZNSsD1Ev@@GLIBCXX_3.4'
- php中加载图片淡入淡出,jQuery实现滚动图片淡入淡出功能
- Hadoop之HDFS(二)HDFS基本原理
- 三星S4使用体验(Markdown版)
- 如何在网站上设置在线QQ客服
- 01-ECAM、发展史、JS值、编程语言、变量
- Java实现 LeetCode 109 有序链表转换二叉搜索树
- 语c语言描写,【萌°语c】『语c』语c基本知识的简单介绍
- 谁锁了我的帐号?(AD账号的锁定状态查询)
- cPanel 开启 FastCGI
- [linux小水滴]工具安装与使用
- 钉钉免费内网穿透工具使用
- 二手书交易系统用例图2.0
- 手把手教你用 wxPython 设计一个可以弹琴的计算器
热门文章
- 指定jdk8_动图+源码+总结:深度解析 JDK8 中的数据结构(珍藏版)
- python程序控制结构_python程序控制结构
- Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
- 迅为linux下串口,迅为iMX6UL开发板多路串口开发板接口详解
- Fiddler的常用功能(Web断点调试)
- 动态毛玻璃特效html,js和CSS3炫酷毛玻璃面板特效
- matlab四条曲线围成面,matlab中怎么给四条曲线作出图例啊?求大神指导
- 【AI学院】有三AI博士小姐姐带你学深度学习之图像识别下篇,附上篇回顾
- 速卖通新手入驻必须了解的“9大知识点”
- php中获取ip的地域信息比较精准