本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西:

Hello World的Main方法:

利用VS2010新建一个控制台应用程序Hello World,完善代码如下:

类和Main方法:

这里系统自动创建了一个叫做Program的类,并且里面有个默认的Main方法。在这里,我们程序的类名可以任意的修改,但是Main()方法却必须唯一,修改之后运行会出错。因为Main()方法是我们这个应用程序的入口。错误提示如下:
Main方法是引用程序的入口,处理逻辑都在Main方法内部。而默认,我们生成了一个静态的、有void(空)返回值,接受一个参数字符串数组的形式。不过,这不是Main方法的唯一形式,除此之外,我们还有以下几个签名形式。如果定义的入口函数非空返回值,那么我们必须要程序结束的时候提供一个返回值。(返回值0表示正常结束):
static int Main(string[] args)
{
    //处理逻辑
    return 0;
}
//无参数无返回值
static void Main()
{
}
//无参数有返回值
static int Main()
{
    return 0;
}
查看参数,可以通过System.Environment类的成员来实现。(Environment.GetCommandLineArgs()),该函数返回一个string数组,可以通过遍历查询该返回数组得到参数。

System.Console类,该类主要有如下三个功能:

1、进行基本的输入输出。如上代码WriteLine方法表示输出在控制台,而ReadLine则表示接受一个输入。除此之外,还有Write和Read方法,用法和他们类似。
2、格式化控制台输出。可以用占位符来格式化,形式如:Console.WriteLine("{0},{1}",123,456);其中占位符的数字对应后面输出参数的次序,从0开始。并且占位符可以不分先后。
3、格式化数值数据。类似于C语言和C++里面的%d,%x的表示输出数字和十六进制格式,这里面可以用D/d和X/x。用法:Console.WriteLine("c format:{0:c}", 9999);
4、除此之外,在控制台应用程序外格式化数值数据。利用string.Format()方法来格式化,用法:string userNum = string.Format("100000 in hex is {0:x}", 100000);
 

系统数据类型和C#简化符号:

和任何编程语言一样,C#定义了一组用于表示局部变量、成员变量、返回值以及输入参数的基本数据类型。如bool、byte、short、int、long等。不过,和其他的编程语言不同,这些关键字不只是简单的编译器可以识别的标记,C#数据类型关键字其实是System命名空间中完整类型的简化符号,如ulong是System.UInt64的简写。
变量声明和初始化:int myInt; string myString;初始化可以直接赋值int myInt=0;也可以如此,int a=1,b=2,c=a;
内建数据类型和new操作符:所有的内建数据类型都支持默认构造函数,这些类型可以用new开创建。如bool类型,也可以如此表示:bool b=new bool();
数据类型类的层次结构:.net基本数据类型都有一个类层次结构,累的层次结构顶端的类型会为派生类型提供一些默认行为。这些核心类型之间的关系如下图所示:
    
数值数据类型的成员:我们为了继续研究C#的数据类型,必须知道.net的数值类型支持MaxValue和MinValue属性,这两个属性说明了给定的类型可以存储的范围。用法,int.MaxValue,double.MaxValue等。
System.Boolean成员:它不支持MinValue和MaxValue,因为他只能来源于集合{true|false}。但却支持TrueString和FalseString属性集合(相应地返回True或False)。
System.Char成员:C#的文本数据是由string和char关键字表示的,两者都是基于Unicode的。string表示连续字符,char表示单个字符。
从字符串数据中解析数值(.Parse()方法):这个技术在想把用户输入的数据转换成一个数值的时候非常有用。用法int i=int.Parse("8");
System.DateTime和System.TimeSpan:DateTime表示日期时间,而TimeSpan则允许你方便的使用各个成员定义和转换时间单位。
.net 4 System.Numerics命名空间:它定义了一个BigInteger结构,用来表示较大的数值,它没有固定的上下限。
 

使用字符串数据:

基本字符串操作:string.Length获取字符串长度、string.ToUpper获取字符串变成大写的值、string.ToLower获取字符串变成小写的值。
字符串拼接:string.Concat(),不过我们也可以通过+号来表示拼接。两者的编译结果是一样的。
转义字符:和C一样,都是反斜杠\,可以将C#中的特殊字符原本的表达出来。
定义逐字字符串:C#中引入了以@为前缀的字符串字面量激发,属于称为逐字字符串。使用它的字符串就不用使用转义字符了。
字符串和相等性:用String的Equals方法或内嵌的相等操作符(==等)来进行相等性操作,这里表示指的是区分大小写、逐字符的相等性操作,虽然String类型是引用类型。
字符串是不可变的:string类型的方法,气势反悔了一个按修改格式的新字符串对象,原来的字符串不会改变的。所以,string类如果被滥用,它就会变得低效、并导致代码膨胀,特别是在字符串拼接的时候。(因为每次操作都要在托管堆上加载一个新的字符串对象,原有的最终会被垃圾回收)
System.Text.StringBuilder类型:此类和System.String类相似,不过为了防止String类出现的低效问题,StringBuilder定义了很多用来替换和格式化片段的方法。它的独特之处在于,当我们调用这个类型的成员时,都是直接修改对象内部的字符数据(因此更高效),而不是或许按修改后格式的数据副本。
 

窄化和宽化数据类型转换:

即大值和小值只见的运算由于C#是类型安全的,窄化运算会有错误,不过,可以通过强制转换来窄化,但这样很可能造成数据丢失。
C#提供的checked和unchecked关键字将确保数据修士肯定会被检测到。

checked的用法:

用在一句代码里如下:byte sum=checked((byte)Add(b1,b2));
用在一个语句块上,检测是不是强制溢出:
checked
{
    byte sum=(byte)Add(b1,b2);
    Console.WriteLine(sum);
}
unchecked关键字和checked的关键字用法一样,只不过他会检查所有运算逻辑,进制个别情况系跑出语出的异常。
System.Convert的作用:使用它的一个好处是,它提供了语言无关的方式来进行数据类型的转换(例如,VB的类型转换完全不同的C#)。
 

隐式类型本地变量(var):

C#语言定义了一种可以使用var关键字创建隐式类型的本地变量。使用var关键字不必指定具体的数据类型(如int、bool、string)。这么做时,编译器将根据本地数据点的初始值类自动推断实际的数据类型。用法如下:
var myInt=0;//表示定义的是个整形,var等同于int
var myBool=true;//表示定义是个布尔值。其中var等同于bool
隐式类型变量的限制:首先,隐式类型只能用于方法或属性范围内的本地变量。用var关键字定义返回值、参数或者自定义类型的字段数据都是不合法的。同样,用var关键字声明的本地变量必须在声明时分配初始值,并且这个初始值不能为null。最后,用C#的?标记定义可控的隐式类型本地变量是不合法的。
隐式类型数据是强类型数据:隐式类型变量在编译时影响变量的生命,之后该数据点将被视为它生命的类型,为该变量分配不同的类型将会导致编译时错误。
隐式类型变量用途:在Linq查询中将会变得非常有用。
 

C#迭代结构:

for循环,同C和C++中的for循环用法一样,我们可以创建复杂的终止条件,构建无限循环,使用goto、continue、break关键字。
foreach/in循环:C#foreach关键字允许遍历数组中的所有项,不需要测试数组的上线。
foreach结构中使用var,此时,编译器可以准确的判断出该类型的准确的类型。
while和do/while循环:当希望执行一段语句直到满足某个终止条件时,while循环结构很有用。和简单的while循环类似,当我们需要进行一些次数补丁的动作时,可以使用do/while循环。两者的区别是,do/while循环肯定会执行至少一次对应的代码块,而while循环则有可能不会执行就结束。
 

条件结构和关系/相等操作符:

if/else语句:C#中的if/else语句只能作用域布尔表达式,不能用于诸如-1、0这样的值,因此if/else语句通常会包含一些C#操作符。(==、!=、<、>、<=、>=以及逻辑操作符&&、||、!)。说明:&&和||操作符在必要时都会‘短路’,也就是说,如果一个表达式被确定为false,其他的表达式就不会被检查了。
switch语句:和C系列语言中的一样,switch语句允许我们根据定义的选择来处理程序流程。C#要求每一个case(包含default)包含以break或goto终止的可执行语句来避免失败。
 

小结:

这一小节我们了解了每一个C#可执行程序的一些基本的结构,以及探讨了一些C#内建数据类型的细节。并且介绍了var隐式关键字和C#支持的条件和迭代语句。接下来的一小节我们将会完成对和新语言特性的研究

2、C#核心编程结构的更多相关文章

  1. 3、C#核心编程结构下

     本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西: 这一小节是上一小节的补充,主要涉及到一下的知识细节: 1.C#方法的各种细节 2.探讨out ...

  2. Qt on Android 核心编程

    Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...

  3. windows核心编程 - 线程同步机制

    线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...

  4. windows核心编程---第九章 同步设备IO与异步设备IO之同步IO

    同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...

  5. windows核心编程---第八章 使用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  6. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  7. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  8. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  9. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

随机推荐

  1. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  2. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  3. C语言 · 矩形面积交

    问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中 ...

  4. sonn_game网站开发01:写在最前面

    之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...

  5. 解决PHP-问题:Class 'SimpleXMLElement' not found in

    1.问题 在ubuntu 16.10中,学习PHP,学习到PHP如何生成XML文件时候,碰到了这个问题: PHP Fatal error: Class 'ClassName\SimpleXMLElem ...

  6. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  7. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  8. J a v a 的“多重继承”

    接口只是比抽象类“更纯”的一种形式.它的用途并不止那些.由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起.这一点是至关重要的 ...

  9. 【云知道】究极秒杀Loadrunner乱码

    Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...

  10. 基于window7+caffe实现图像艺术风格转换style-transfer

    这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...