【C#高级编程】笔记之核心C#
Main()方法
每一个C#可执行文件(如控制台程序、Windows程序和Windows服务)都必须有一个入口点——Main()方法(注意M大写)。
这个方法必须是类或静态方法,并且返回类型必须是int 或 void。不过给这个方法定义什么访问级别并不重要,一般定义为public,不过你要是把它定义成了private,你会发现它还是能够运行的。
同一个程序中只能有一个Main()方法,如果你一定要定义好几个Main方法,你就得明确告诉编译器 哪个Main()方法才是程序的入口。
另外,Main()方法也是可以有参数的:public static int Main(string[] args) {}
- 变量
C#的变量必须初始化,这是C#强调安全性的一个重要例子。大多数编译器会把没有初始化做为一个警告处理,但是C#编译器会把它当做一个错误处理。这样,可以防止我们无意中从其他程序遗留下的内存中获取到垃圾值。
C#通过两种方法保证变量进行初始化:1.对于类或结构中的字段,如没有显式初始化,在创建他们的时候会赋给它们一个默认值;2.对于方法中的局部变量,则必须先进行初始化,然后才能在后面的语句中使用它们的值。
C#中实例化一个对象,必须使用new关键字。
- 类型推断(匿名类型)
类型推断:var myAge = 19;//编译器可以根据变量的初始值“推断“变量的类型;与Javascript的变量的申明一致啊
使用类型推断需要遵守这几条规则:1.变量必须初始化,不初始化无法判断类型的;2.初始值不能为空;3.初始化器必放在表达式中;4.不能把初始化器设置为一个对象,除非在初始化器中申明一个新的对象。
- 变量的作用域
1.只要类在某个作用域内,其字段(成员变量)也在该作用域内;2.在for、while等类似的语句中申明的局部变量存在于该循环中;3.局部变量在于申明该变量的块语句中,或方法结束的右大括号之前的作用域内
C#在变量之间有一个基本的划分,它把类型级别的申明看作字段,而把方法中申明的变量看局部变量
- 常量
1.常量必须在申明的时候初始化;2.常量的值必须在编译时用于计算,所以从一个变量获取的值给常量 赋值是行不通的;3.常量总是静态的,所以不请允许用static修饰常量;4.使用常量可以程序更加易读、易修改、避免出现错误的机率。
- 数据类型
C#把数据类型分为两种:值类型和引用类型。值类型存储在堆栈中,而引用类型存储在托管堆上。
C#中有15个预定义类型,其中 13个是值类型,2个引用类型(string和object),大多数C#数据类型,包括我们定义的类,都是引用类型。
在C#中,所有的数据类型都以与平台无关的方式定义,如:int总是32位带符号的整型,short有16位长,long有64位长,这与C++有很大的差异。
decimal类型,128位的高精度,专为财务计算而设计,充分弥补的double类型的不足。
string虽然是引用类型,但是在操作上还是有 一些区别。例如:字符串是不可改变的,修改其中一个字符串,会创建一个全新的对象,而另一字符串不发生变化
输出结果: s1 is a string s2 is a string s1 is now another string s2 is now a string
- 流控制
C#中的goto语句有两个限制:1.不能跳进循环中 ;2.不能退出finally块。和C++一致
- 命名空间
命名空间提供了一种组织类和其他类型的方式。与文件和组件不同,它是一种逻辑组合,而不是物理组合。所以可以一同一个程序集中使用不同的命名空间,也可以在多个程序集中定义同一个命名空间的类型。
建议在一个项目开始之前,就定义命名空间的层次定义。一般比较接受的格式是这样子的:公司名.项目名.系统的各大部分。公司应当花一些时间开发一种命名空间模式,这样其开发人员就可以快速定位到他们所需要的功能上。
如果命名空间的名字很长,别忘了给它起个别名:using alis=namespaceName;
- 注释
C#的注释方式使用传统的C语言风格的注释,单行用// ,多行用 /* */ 。需要注意的是,可以把多行注释用在代码之中,虽然并不推荐这么使用:
Console.WriteLine("this is a book"/*向控制输出一句话*/);
当然,C#还有一种更强大的注释 /// 。用这样的一条语句,C#的编译器就可以把这种注释从代码文档中抽取出来,存入一个XML文档之中:
csc /t:library /doc:MathLibrary.xml MathLibrary.cs
让我解释一下:csc就是编译器了;/t:library /doc:MathLibrary.xml 是一个参数,注意中间的空格,MathLibrary.xml 是要生成的XML文档的名字;MathLibrary.cs 是什么我不想再解释了
- C#预处理器指令
使用预处理器指令可以禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,即基本版本和拥有更多功能的企业版本, 就可以使用这些预处理器指令。需要注意的是C#中的预处理器指令可不像C++那么丰富,它们的使用也并不频繁,常见的预处理器指令如下:
#define和#undefine :定义一个符号(或者说变量也行啊,我习惯叫符号)。undefine就是删除定义过的符号
#if #eif #else #endif :功能和C#中的流程处理语句一样的,很少用到
#warning #error :编译器遇到它们会分别差生警告和错误
#region #endregion :把一段代码标记为给定名称的一个块,最有用的一组指令就是它啦,美化代码必用!
- C#编程规则
1.标识符规则:必须以字母或下划线开头;不能使用关键字做标识符,如果非要用,请在标识符前加@,例:int @abstract;标识符也可以使用Unicode字符,用语法\uXXXX表示,如: _Identifier 与 \u005fIdentifier 是一样的定义。最的上图一张:
要认真理解这上面所有的关键字,理解了,C#语言这一块就算是基本过关了。
2.用法约定:定义变量时不使用任何前缀;定义名称、命名空间的风格应该保持一致,名称不应该与任何关键字发生冲突;字段应该总是私有的;
这一章介绍的内容都是一些C#基础的东西,不过细细总结,发现需要注意的东西还真不少,希望对看到这篇博文的人有所帮助.