本学习主要参考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. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  2. jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能

    ▓▓▓▓▓▓ 大致介绍 学习了妙味,用原生的JavaScript实现jQuery中的某些部分功能 定义自己的函数库lQuery ▓▓▓▓▓▓ $()选择器的实现 jQuery是面向对象的,所以自己编写 ...

  3. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  4. javascript之闭包理解以及应用场景

    半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...

  5. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...

  6. eclipse如何添加Memory Analyzer

    ①启动Eclipse,并打开"Install New software..."对话框: ②点击Add,如图: ③点击OK,最后一直点next,完成

  7. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  8. ORACLE中STATUS为INACTIVE但是SERVER为SHARED状态的会话浅析

    我们知道当ORACLE数据库启用共享服务器模式时,通过共享服务器模式连接到数据库的会话是有一些特征的.在v$session里面,其SERVER的状态一般为SHARED和NONE, 为SHARED时,表 ...

  9. Flappy Bird 源码走读

    参考:https://github.com/kirualex/SprityBird 该项目基于spritekit,代码的结构很清楚,感觉用来学习spritekit非常不错. 1.项目只有一个viewC ...

  10. 简单的转盘抽奖——CSS动画优化

    前言 前两天去一家公司面试,被问到一些小游戏的东西.面试官提到了刷红包还有抽奖这些怎么实现,当时简单说了下思路,回来之后想想还是说的太轻描淡写了,干说不做就是耍流氓,所以就做了一个(Demo & ...