本学习主要参考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. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  2. python之路 - 基础1

    1.安装windows安装双版本Python2,Python3 下载Python2和Python3https://www.python.org/downloads/ 分别安装两个版本 进入Python ...

  3. OpenCASCADE Expression Interpreter by Flex & Bison

    OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide d ...

  4. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  5. iOS开发之Masonry框架源码深度解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  6. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. Linux设备管理(三)_总线设备的挂接

    扒完了字符设备,我们来看看平台总线设备,平台总线是Linux中的一种虚拟总线,我们知道,总线+设备+驱动是Linux驱动模型的三大组件,设计这样的模型就是将驱动代码和设备信息相分离,对于稍微复杂一点的 ...

  9. 在 Linux 上使用 Jexus + Mono 建立 Asp.Net 网站.

    godaddy 买了个net空间,一点也不好用. 几个G的数据, 上传数据只有几kb , 想用 ssh 登录上去用 wget 下载,也不行 windows的主机貌似没有 ssh 功能... 后来实在忍 ...

  10. 支付宝AR抢红包?前端轻松就破解~

    近期阿里搞了各LBS+AR实景的红包玩法,小伙伴们在公司里都玩疯了~ 有时候为了抢一个红包,会跑到另一个地方去拍照,虽然略麻烦,但整体的互动还是很有意思的. 不过对于机智的前端童鞋来说,只需要简单的一 ...