zoukankan      html  css  js  c++  java
  • 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 小结

    人生,总是有一些空城旧事,年华未央;总是有些季节,一季花凉,满地忧伤。许多事,看开了,便会峰回路转;许多梦,看淡了,便会云开日出。学会思索,学会珍藏,微笑领悟,默默坚强。
  • 相关阅读:
    每日总结59
    每日总结58
    每日总结57
    每日总结56
    每日总结55
    每日总结54
    每日总结53
    每日总结52
    学习日报
    学习日报
  • 原文地址:https://www.cnblogs.com/yuzhou133/p/4693916.html
Copyright © 2011-2022 走看看