简单的控制台应用程序。

代码(它有把某条消息写到屏幕上的一个类组成)

编译并运行程序得到结果:

在上面的代码示例中,前几行代码与名称空间有关,名称空间是把相关类组合在一起的方式。namespace关键字声明了应与类相关的名称空间。编译器在using语句指定的名称空间中查找没有在当前名称中定义但在代码中应用的类。

using Systme;

namespace Work

{

如果没有using,就必须完全限定对Console.WriteLine()方法的调用,如下

System.Console.WriteLine("Hello from Worx.");

标准的System名称空间包含了最常用的.NET类型。C#没有用于输入和输出的内置关键字,而是完全依赖于.NET类。      声明一个类MyFirstClass全名(Worx.MyFirstCSharpClass:)

所有的c#代码都必须包含在一个类中,类的声明包括class关键字其后是类名和一对花括号。与类相关的所有代码都应放在这对花括号中。

每个c#可执行文件都必须有一个入口点,那就是Main()方法(M大写)

public static void Main()

{

在启动时调用这个方法时,该方法要么没有返回值(Void),要么返回一个整数(int).在c#中方法的定义如下:

[modifers] return_type MethodName([parameter])

{

//Method body. NB.This code block is pseudo-code.

}

第一个方括号中的内容表示可选关键字。有两个修饰符public和static,public表示在任何地方使用,所以可以在类的外部调用它。static表示方法不能在类的实例上执行,因此不必先实例化类在调用。把返回类型设置为void,.

WriteLine()是一个静态方法。

声明变量:datatype identifier

声明int变量i.然后赋值(=)i=10;并初始化它的值int i=10;还可以声明和初始化多个变量int x=10,y=20;在多个变量的声明中,不能指定不同的数据类型:int x=10;bool y=true;int x=10,bool y=true;

变量的初始化

c#有两个方法可确保变量在使用前进行了初始化:1变量在类或结构中的字段,如果没有显示初始化,创建这些变量时,其默认值就是0。2方法的局部变量必须在代码中显示初始化,之后才能子语句中使用它们的值。如果检测到局部变量在初始化之前就使用了它的值,就会产生错误。

c#中错误的语句:

错误的信息:

类型推断使用var关键字。编译器可以根据变量的初始值推断的变量类型:

int someNumber=0;

就变成var someNumber=0;

下面是另一个小例子:

程序输出如下:

遵循规则:1变量必须初始化,否则编译器就没有推断变量类型的依据。2初始化不能为空。3初始化必须放在表达式中。4不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象。

变量的作用域是可以访问该变量的代码区域。

1局部变量的作用域冲突,不能用的代码是:

这段代码使用了两个for循环打印0--9的数字,在逆序打印0--9的数字重要的是同一个方法中,代码i声明了两次,可以这么做的原因是,两次声明,i都是在循环内部声明的所以变量i对于个子的循环来说都是局部变量。

例子:

会产生如下错误:

其原因是:变量j时在for循环开始定义的,在执行for循环时应处于其作用域内,在Main()方法结束后,变量j才超出作用域,第二个j(不合法)则在循环的作用域内,该作用域嵌套在Mian()方法的作用域内,编译器无法区分这两个变量,所以不允许声明第2个变量。

字段和局部变量的作用域冲突:代码:

在本例中,当Mian()方法中断,程序结束时,才会删除该类。

要引用类级变量,使用语法objectfieldname,上例,访问的是静态字段。就只能用类本身的名称:

常量,它的值在使用的过程中不会发生变化的变量。变量变常量在变量前面加上关键字const,例如:const int a=100;常量的使用规则:在声明时必须初始化。常量的值必须能在编译时用于计算。常量总是静态的。

预定义数据类型

数据类型:1值类型。2应用类型。区别:值类型直接储存其值,引用类型储存对值得引用。储存位置:值类型储存在堆栈中,而引用类型储存在托管堆上。

定义了一个类Vector,Vector是一个引用类型,他有一个int类型的成员变量Value:

在执行代码后,只有一个Vector对象。

如果变量是一个引用,就可以把其值设置为null,表示它不能引用任何对象:y=null;

如果将引用设置为null,显然就不可能对他调用任何非静态的成员函数或字段,这么做会在运行期间抛出一个异常。

在.NET中,short有16位长,Int有32位,long类型有64位。所有的整形类型的变量都能被赋值予十进制或十六进制,后者需要0x前缀:long x=0x12ab;

浮点类型:

double数据类型比float数据类型大,提供的精度也大一倍(15位)

decimal类型表示精度更高的浮点数。

bool类型包含布尔值TRUE或FALSE

字符类型

CHAR类型的字面量使用单引号括起来的。'A'

string类型     就是System.String.

其输出结果为:

if语句

if(condition)

statement(s)

else

statement(s)

如果在条件中执行多个语句,就需要用花括号({...})把这些语句结合为一个块(这也适用于其他可以把语句组合为一个块的c#结构,如for和while循环)

bool  iszero;

添加到if子句中的else if语句的个数不受限制。

if子句中的表达式必须等于布尔值。不能直接测试整数,而必须明确地把返回的整数转换为布尔值TRUE或FALSE如,将值与0或null进行比较:

switch语句测试intergerA变量的值:

下面代码说明了如何使用goto模拟失败,得到的代码会非常混乱:

另一种情况,如果一条case语句为空,就可以从case调到下一条case上,就不用goto语句都可以处理两条或多条case子句了。

c#中的switch语句与c++中的switch的语句的另一个不同之处:在c#中,可以把字符串用作测试的变量。

for循环语句如下:

for循环典型用法,输出0——99的整数:

实际上c#在给变量加1时有一种简化方式,即不使用i=i+1,而简写为:i++.

下面的代码显示数子行,他还使用另一个Console方法Console.Write(),该方法的作用与Console.WriteLine()相同,但不在输出中添加回车换行符:

结果是:

while循环:

while循环体中的语句把布尔标志设置为FALSE,结束循环,如:

do...while循环:

forreach循环语法:

goto语句:

break语句——在switch语句中使用它推出某个case语句。break也可以用于退出for,foreach,while或do。。。while,该语句会使控制流执行循环后面的语句。

枚举:枚举可以使代码更易于维护,有助于确保给变量指定合法的,期望的值。枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊,变化多端的数来表示,。

timeofday枚举:

会返回字符串Afternoon.

名称空间

名称空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。

在名称空间中嵌套其他名称空间,为类型创建层次结构:

using语句类型:

假如类NamespaceExample同时存在于Work.proCSharp.Basics和Work.proCSharp.oop名称空间中,如果要在名称空间Worx.ProCSharp中创建一个类test,并在该类中实例化一个NameespaceExample类,需要指定使用的类:

名称空间的别名语法:using alias=NamespaceName;

多个Main()方法:

错误:

如果有多个Main()方法,编译器就会返回一个错误消息。可以使用/main选项,其后跟Main()方法所属类的全名(包括名称空间),明确告诉编译器把那个方法作为程序的入口点:

给Main()方法传递参数

下面的例子ArgsExample.cs是在传递给Main()方法的字符串数组中循环,并把每个选项的值写入控制窗口:

有关编译c#文件的更多内容。

如果想得到一个可由.NET运行库加载的非执行文件比如DLL就必须把它编译为一个库。

下面的例子说明如何编译类库,并在另一个程序集中引用这个库。包含两个文件。

类库。控制台应用程序,该应用程序调用库中的一个类。

控制台调用其Add()方法,在控制台窗口中显示结果:

控制台I/O

要从控制台窗口中读取一行文本,可以使用Console.ReadLine()方法,它会从控制台窗口中读取一个输入流,并返回输入的字符串。所有的预定义类型在大多数情况下,在显示值之前不必将他们转换为字符串。Console.WriteLine()还允许用与c的printf()函数类似的方式显示格式化的内容。

每个标记都包含一个基于0的索引,表示列表中参数的序号,如,{0}表示列表中的第一个参数,代码:int i=10;

int j=20;

Console.WriteLine("{0} plus{1} equals {2}",i,j.i+j);

会显示:

10 plus 20 equals 30

如果要使用格式字符串,应把它放在给出参数个数和字段宽度的标记后面,并用一个冒号把它们隔开。例如,要把decimal值格式化为货币格式,且使用计算机上的地区设置,精度为两位数,使用C2:

使用注释

单行//...,多行/*...*/;

XML文档

功能:根据特定的注释自动创建XML格式的文档说明,这些注释都是单行注释,但都以3条斜杠开头。

#define和#undef

#define用法#define DEBUG    #undef正好相反——他删除符号的定义:#undef DEBUG 如果符号不存在,那么就无意义。同样,如果符号已经存在,则#define也没有作用。必须把#define和#undef命令放在c#源文件的开头位置,在声明要编译的任何对象的代码之前。#define本身没有啥作用,但如果与其他预处理命令放在一起,那么功能就强大了。

#if,#elif,#else,#endif

#warning #erro

#line指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。

#pragma指令可以抑制或还原指定的编译警告。

c#编程规则

尽管可以包含数字字符,但它们必须以字母或下划线开头。不能把c#关键字作为标示符。

c#中的约定是命名变量时不使用任何前缀:string Result;string Message;.

名称的大小写:注意,名称空间和类,以及基类中的成员等的名称都应遵循该规则。

类型中所有私有成员字段的名称都应是camel大小写形式:

private int subscriberId;注意成员字段的前缀常常用一条下划线开头;private int_stuscriberId;

传递给方法的所有参数的名称都应该是camel大小写形式:public void RecordSale(string salesmanName,int quantity);

名称空间的名称非常重要。微软建议使用如下

名称不应与任何关键字冲突。

字段用法

字段应总是私有的,但在某些情况下也可以把常量或只读字段设置为共有。因为如果把字段设置为共有,就不利于以后的扩展或修改之类。

2.一步一步学c#(二):核心c#的更多相关文章

  1. 一步一步跟我学DeviceOne开发 - 仿微信应用(一,二,三)

    这是一个系列的文档,长期目标是利用DeviceOne开发一些目前使用广泛的优质手机应用,我们会最大化的实现这些应用的每一个功能和细节,不只停留在简单的UI模仿和Demo阶段,而是一个基本可以使用的实际 ...

  2. usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备

    之前写了一个简单的例子usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备,下面的这个例子是获取各种usb设备.usb接口以及usb连接点(endpoint) 正如上一 ...

  3. 一步一步学Vue(十二)

    为了提升代码的逼格,之后代码改为Vue文件组件,之前代码虽然读起来容易理解,而且适合在小的项目中使用,但是有如下缺点: 全局定义(Global definitions) 强制要求每个 componen ...

  4. 一步一步学ROP之linux_x64篇

    一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...

  5. 一步一步学ROP之linux_x86篇

    一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 ​ 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...

  6. (转载)一步一步学Linq to sql系列文章

    现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContex ...

  7. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  8. 一步一步学Remoting系列文章

    转自:http://www.cnblogs.com/lovecherry/archive/2005/05/24/161437.html (原创)一步一步学Remoting之一:从简单开始(原创)一步一 ...

  9. 一步一步学android控件(之十六)—— CheckBox

    根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式.今天主要学习如何自定义CheckBox样式.在CheckBox状态改变时有时需要做一些 ...

  10. 【DG】[三思笔记]一步一步学DataGuard

    [DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)..... ...

随机推荐

  1. 读Flask源代码学习Python--config原理

    读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因   莫名其妙在第一份工作中使用了从来没有接 ...

  2. C语言如何定义结构体

    原文地址 1. struct与typedef struct区别 struct是结构体的关键字,用来声明结构体变量如 struct  student {   char  num[10];      ch ...

  3. MVC3 带查询的分页Helper

    接上篇mvc3 分页Helper. 带查询的分页Helper是在上一篇分页的基础上来的.下面看代码: 首先,在System.Web.Mvc命名空间下的自定义类HtmlPage下面添加一个用于处理“查询 ...

  4. SQL Server 向堆表中插入数据的过程

    堆表中  IAM 记录着的数据页,表的各个数据页之间没有联系.也就是说一个页面它不会知道自己的前一页是谁,也不知道自己的后一页是谁. 插入数据时先找到IAM页,再由pfs(page free spac ...

  5. Oracle EBS-SQL (SYS-11):查询系统已打的PATCH.sql

    select a.patch_name,         b.DRIVER_FILE_NAME,         c.language,         b.creation_datefrom app ...

  6. 九度OJ 题目1534:数组中第K小的数字(二分解)

    题目链接:点击打开链接 题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6 ...

  7. 应用java多线程实现server端与多client之间的通信

    应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...

  8. md笔记——HTTP知识

    HTTP权威指南 ******** 第一部分:HTTP:Web 的基础 第一章:HTTP概述 MIME 因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过 Web 传输的对象都打上了名为 M ...

  9. sql中复合组建解析

    每个表只能有一个主键 唯一键/约束可以多个 复合主键是指复合唯一,比如: 1 1 1 2 2 1 2 2 单看任何一列都不是唯一,但组合起来就是唯一的. Create Table 表名 (字段名1 I ...

  10. hdu4741

    2013年两场网络赛已经过了,之前的现场赛拿了多次铜牌,而这两场网络赛我们都表现得这么水,不由得感慨起来,ACM竞赛生涯就要画上句号了,甚至整个学习生涯中这种纯学术的竞赛都要完了.这两场网络表现得不好 ...