c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C#
本章内容:
声明变量
变量的初始化和作用域
C#的预定义数据类型
在c#程序中使用条件语句、循环和跳转语句执行流
枚举
名称空间
Main()方法
基本的命令行c#编译器选项
使用System.Console执行控制台I/O
使用内部注释和文档编制功能
预处理器指令
C#编程的推荐规则和约定
2.1 第一个c#程序
2.1.1 代码
using System;
namespace Wrox
{
Public class MyFirstClass
{
static void Main()
{
Console.WriteLine(“Hello from Wrox.”);
Console.ReadLine();
return;
}
}
}
2.1.2 编译并运行程序
cs First.cs
First.exe
Hello from Wrox.
2.1.3 详细介绍
标准的System名称空间包含了最常用的.NET类型。在c#中做的所有工作都依赖于.NET基类。
2.2 变量
在c#中声明变量使用下述语法:
datatype identifier;
2.2.1 变量的初始化
c#有两个方法可确保变量在使用前进行了初始化:
变量是类或结构中的字段,如果没有显式初始化,创建这些变量时,其默认值就是0
方法的局部变量必须在代码中显式初始化,之后才能在语句中使用它们的值。此时,初始化不是在声明该变量时进行的,但编译器会通过方法检查所有可能的路径,如果检测到局部变量在初始化之前就使用了它的值,就会产生错误。
2.2.2 类型推断
类型推断用var关键字,声明变量的语法有些变化。编译器可以根据变量的初始化值“推断”变量的类型。
需要遵循一些规则:
变量必须初始化。否则,编译器就没有推断变量类型的依据
初始化器不能为空
初始化器必须在表达式中。
不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象
2.2.3 变量的作用域
变量的作用域是可以访问该变量的代码区域。
1、局部变量的作用域冲突
2、字段和局部变量的作用域冲突
2.2.4 常量
顾名思义,常量是其值在使用过程中不会发生变化的变量。在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量
常量具有如下特定:
常量必须在声明时初始化,指定了其值后,就不能再改写了。
常量的值必须在编译时用于计算。因此,不能用从一个变量中提取的值来初始化常量。如果需要这么做,应使用只读字段。
常量是静态的。但注意,不必在常量声明中包含修饰符static
由于使用易于读取的名称(名称的值易于理解)替代了较难读取的数字或字符串,常量使程序变得更易于阅读
常量使程序更易于修改
常量更容易避免程序出现错误。
2.3 预定义数据类型
2.3.1 值类型和引用类型
值类型直接存储其值,引用类型存储对值的引用
这两种类型存储在内存中的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。
如果变量是一个引用,就可以把其值设置为null,表示它不引用任何对象
如果要把自己的类型定义为值类型,就应把它声明为一个结构
2.3.2 CTS类型C#认可的基本预定义类型并没有内置于C#语言中,而是内置于.NET Framework中。在c#中声明一个int类型的数据时,声明的实际上是.NET结构System.Int32的一个实例。在语法上,可以把所有的基本数据类型看做是支持某些方法的类。
string s=i.ToString();
应强调的是,在这种便利语法的背后,类型实际上仍存储为基本类型。基本类型在概念上用.NET结构表示,所以肯定没有性能损失。
2.3.3 预定义的值类型
1、整型
sbyte、short、int、long、byte、ushort、uint、ulong
2、浮点类型
float、double
3、decimal类型
decimal数据类型专门进行财务计算
4、bool类型
bool
5、字符类型
char
2.3.4 预定义的引用类型
object、string
string是一个引用类型。String对象被分配在堆上,而不是栈上。因此,当把一个字符串变量赋予另一个字符串时,会得到对内存中同一个字符串的两个引用。但是string与引用类型在常见的操作上有一些区别。例如,字符串是不可改变的。修改其中一个字符串就会创建一个全新的string对象,而另一个字符串不发生任何变化。
2.4 流控制
2.4.1 条件语句
if、switch
在switch语句中,如果一个case字句为空,就可以从这个case跳到下一条case上。
2.4.2 循环
for、while、do …while、foreach
2.4.3 跳转语句
goto、break、continue、return
2.5枚举
枚举是用户定义的整数类型。
要从字符串转换为枚举,需要使用静态的Enum.Parse()方法。
2.6 名称空间
2.6.1 using 语句
2.6.2 名称控件的别名
using alias=NamespaceName;
名称空间别名的修饰符是“::”
2.7 Main()方法
c#程序是从方法Main()开始执行的。这个方法必须是类或结构的静态方法,并且其返回数据类型必须是int或void
2.7.1 多个Main()方法
2.7.2 给Main()方法传递参数
2.8 有关编译c#文件的更多内容
2.9 控制台I/O
2.10 使用注释
2.11 c#预处理指令
预处理器指令的开头都有符号#
2.11.1 #define和#undef
#define DEBUG
它告诉编译器存在给定名称的符号,在本例中是DEBUG。这有点类似于声明一个变量,但这个变量并没有真正的值,只是存在而已。这个符号不是实际代码的一部分,而只在编译器编译代码时存在。在c#代码中它没有任何意义。
#undef 正好相反------它删除符号的定义:
#undef DEBUG
如果符号不存在,#undef就没有任何作用。同样,如果符号已经存在,则#define也不起作用。
必须要把#define和#undef命令放在c#源文件的开头位置,在声明要编译的任何对象的代码之前。
注意:这里应注意一般c#语法的一些变化。预处理器指令不用分号结束,一般一行上只有一条命令,这是因为对于预处理器指令,c#不在要求命令使用分号进行分隔。如果它遇到一条预处理器指令,就会假定下一条命令在下一行上。
2.11.2 #if,#elif,#else和#endif
2.11.3 #warning和#error
当编译器遇到#warning和#error时,会分别产生警告或错误。如果编译器遇到#warning指令,会给用户显示#warning指令后面的文本,之后编译继续运行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL代码。
2.11.4 #region和#endregion
2.11.5 #line
2.11.6 #pragma
2.12 c#编程规则
2.12.1 关于标识符的规则
2.12.2 用法约定
1、命名约定
2、属性和方法的使用
3、字段的用法
2.13 小结
c#高级编程第七版 学习笔记 第二章 核心c#的更多相关文章
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
- c#高级编程第七版 学习笔记 第三章 对象和类型
第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...
- C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换
第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- C#高级编程 (第六版) 学习 第四章:继承
第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码. 2,实现继承 class MyDe ...
- C#高级编程 (第六版) 学习 第三章:对象和类型
第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上 2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件 函数成员 方法:与某个类相关的函数,可以 ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- The Road to learn React书籍学习笔记(第二章)
The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...
- [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”
[HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...
随机推荐
- exists oracle 的用法
CREATE TABLE `A` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGIN ...
- 安装 RabbitMQ
Ubuntu 16.04 安装 RabbitMQ #1 更新 $ sudo apt-get update $ sudo apt-get upgrade #2 安装Erlang $ cd /tmp $ ...
- CSS实现自适应九宫格布局 大全
看到微博和朋友圈都实现了图片九宫格,曾经有次面试也问到了九宫格这个问题,当时想到的是先固定每个单元格的宽高,然后进行浮动.今天想折腾一下,实现自适应父元素宽度的布局.这次我只写了四种方式去实现九宫格, ...
- gitlab+jenkins+tomcat war包部署(此文有新版本)
对本文进行格式整理,url: https://www.cnblogs.com/huandada/p/9969234.html 整个项目的框架为: 1.gitlab的安装(Centos7) 新建/etc ...
- M - COURSES
Consider a group of N students and P courses. Each student visits zero, one or more than one courses ...
- MySQL数据库一些常用命令
输入mysql –u root(用户名) -p 回车后输入密码,就可以连接到mysql数据库. 1. 创建数据库:create database 数据库名称: 2. 删除数据库:drop databa ...
- 异常HTTP Status 500 - Illegal access to constructor, is it public? java.lang.IllegalAccessException: Class com.opensymphony.xwork2.ObjectFactory can not access a member of class action.CoreAction with
Exception report message Illegal access to constructor, is it public? description The server encount ...
- git pull总是要输入账号和密码
如果你用git从远程pull拉取代码,每次都要输入密码,那么执行下面命令即可 git config --global credential.helper store 这个命令则是在你的本地生成一个账号 ...
- 常用邮箱的 IMAP/POP3/SMTP 设置
通过网上查找的资料和自己的总结完成了下面的文章,看完之后相信大家对这三种协议会有更深入的理解.如有错误的地方望指正. POP3 POP3是Post Office Protocol 3的简称,即邮局协议 ...
- [No0000195]NoSQL还是SQL?这一篇讲清楚
随着大数据时代的到来,越来越多的网站.应用系统需要支撑海量数据存储,高并发.高可用.高可扩展性等特性要求. 传统的关系型数据库在应付这些已经显得力不从心,并暴露了许多难以克服的问题. 由此,各种各样的 ...