C#编程语言(一)

应用程序对象
每一个可执行应用程序(控制台程序、Windows桌面程序或Windows服务)必须包含一个定义了Main()方法的类,这个方法用来表示应用程序的入口点。正式地说,定义Main()方法的类叫做应用程序对象。虽然一个可执行程序可以有多个应用程序对象(在执行单元测试的时候可能有用),但是我们必须通过命令行编译器的/main选项来通知编译器将哪个Main()方法用作入口点。
Main()的形式
Main()的签名(所谓签名,就是指一个方法的名称、返回类型和参数列表)具有static关键字修饰。
使用以下任何一种签名都是允许的:
static int Main(string[] args){}
static void Main(string[] args)
static int Main(){}
static void Main()
在Windows操作系统上,应用程序的返回值保存在一个叫做%ERRORLEVEL%的系统环境变量中。如果我们要创建一个以编程方式启动另外一个可执行程序的应用程序,就可以使用静态的System.Diagnostics.Process.ExitCode属性来获取%ERRORLEVEL%的值。
可以使用System.Environment类型的静态方法GetCommandLineArgs()访问命令行参数。这个方法的返回值是一个string数组。第一个索引表示应用程序本身的名称,而数组中其余的元素包含单独的命令行参数(当使用这个方法时,不再需要将Main()定义成带一个string数组作为输入参数的方法,虽然这样做没有害处)。
字符串格式化
如果需要定义一个字符串文本,其中包含一些要到运行时才能知道其值的数据片段,可以使用这种花括号的语法在文本内部指定占位符。在运行时,值会传入来替代每一个占位符。
如:Console.WriteLine("Bruce Wong`s age is {0}.",25)
注意:大括号占位符数字编码方式总是以0开始。
在一个给定的字符串中可以重复特定的占位符。如:
Console.WriteLine("{0}为什么等于{0}?", 1);
还要知道,可以在字符串文本的任意位置放置占位符,而不需要按照递增的次序。例如:
Console.WriteLine("{1}, {0}, {2}", 10, 20, 30);
格式化数值数据

如果数值数据需要更精细的格式化,每一个占位符都可以(可选地)包含不同的格式字符,部分核心格式化选项:

C或c:用于格式化货币。默认情况下,这个标志会以当地的货币符号为前缀(美国英语中是一个美元符号[$])。

D或d:用于格式化十进制数。这个标志还可以用于指定填充值的最小个数。

E或e:用于指数记数法,无论指数常数是大写还是小写,都进行转换控制。

F或f:用于定点小数的格式化,这个标志也用于指定填充值的最小个数。

G或g:代表general。这个字符能用来将一个数格式化为定点或指数格式。

N或n:用于基本的数值格式化(带逗号)。

X或x:用于十六进制格式化。如果使用大写的X,十六进制格式也会包含大写的字符。

给定的占位符值以冒号为标记,将这些字符作为后缀(例如,{0:C}、{1:d}、{2:X})

如:Console.WriteLine("c format: {0:c}", 99999);

输出:$99.999.00

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

C#数据类型关键字其实是System命名空间中完整类型的简化符号。

如:

bool 是System.Boolean的简化符号

int   是System.Int32的简化符号

string 是System.String的简化符号

每一个数值类型(short、int等)都对应System命名空间中的一个结构。简单来说,结构是分配在栈(stack)上的“值类型”。而string和object是“引用类型”,也就是说变量是分配在托管堆(heap)上的。

很多数值数据类型都派生自System.ValueType类。派生自ValueType的类型都会自动在栈上进行分配,因此有一个可预测的生命周期,而且非常高效。另一方面,在继承链上没有System.ValueType的类型(如System.Type、System.String、System.Array、System.Exception以及System.Delegate)不会在栈上分配,而是在垃圾回收堆上进行分配。

从字符串数据中解析数值

.NET数据类型提供了通过给定文本生成(例如解析)相应的底层类型的变量的能力。

格式:新类型.Parse(“字符串”)

例如:int.Parse(“100”)  //字符串解析为整型。

窄化和宽化数据类型转换

宽化用于定义隐式“向上转换”(如short转换成int),并且不会导致数据丢失。

窄话用于定义显示强行“向下转换”(如int转换成short),会导致数据丢失。

窄化時使用checked关键字将确保数据丢失肯定会被检测到。

当我们把一个语句(或者语句块)包装在checked关键字域内时,C#编译器会使用额外的CIL指令来测试在将两个数值数据类型相加、相乘、相减和相除时可能产生的溢出情况。

如果发生了溢出,我们会得到一个运行时异常(准确地说是System.OverflowException)。

另:以打开项目属性页,然后点击Build选项卡中的Advanced按钮。在结果对话框中选择Check for arithmetic overflow/underflow(检测运算上溢/下溢)复选框。可以设定项目级别的溢出检测,減少要把无数代码行放到checked关键字作用域中。煩!

现在,假设我们已经启用了项目级别的设置,如果有一段代码中的数据丢失是可以接受的,我们该怎么做呢?由于/checked标志会检查所有运算逻辑,C#提供的unchecked关键字会禁止个别情况下抛出溢出异常。这个关键字的用法和checked关键字的很相似,我们可以指定一个语句或者一个语句块,例如:

// 假设启用了/checked,这段代码不会触发运行时异常。

unchecked { byte sum = (byte)(b1 + b2); Console.WriteLine("sum = { 0} ", sum); } 

System.Convert的作用

System命名空间定义的Convert类可以用于宽化或窄化数据:

byte myByte = 0;

int myInt = 200;

myByte = Convert.ToByte(myInt);

使用System.Convert的一个好处是,它提供了语言无关(不管你使用C#还是其他托管语言)的方式来进行数据类型的转换。

转载于:https://www.cnblogs.com/bruce-wong/archive/2011/02/27/1966585.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值