本学习主要参考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. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

  2. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

    阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...

  3. 【探索】在 JavaScript 中使用 C 程序

    JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...

  4. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  5. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  6. P2V之后的磁盘扩容新思路

    背景: 原先的物理机环境多是若干块物理磁盘经过RAID卡进行了RAID5之后的虚拟磁盘组,这样我们在操作系统内看到的也就是一块完整的磁盘.我们会在上面进行分区,然后格式化后以便使用. Figure 1 ...

  7. WebApi基于Token和签名的验证

    最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...

  8. Lind.DDD.LindMQ~关于持久化到Redis的消息格式

    回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...

  9. 关于SMARTFORMS文本编辑器出错

    最近在做ISH的一个打印功能,SMARTFORM的需求本身很简单,但做起来则一波三折. 使用环境是这样的:Windows 7 64bit + SAP GUI 740 Patch 5 + MS Offi ...

  10. 基于开源项目SharpMap的热力图(HeatLayer)实现。

    当前公司需要一个用时较少的热力图呈现方案,在避免较底层的GDI开发和比较了多家GIS产品的实际效果之后,团队决定用sharpMap的API来实现,由于之前框架采用的是另外一个开源项目GMap.net, ...