C#:C#语言为我们提供了三类语句
查阅了C#语言规范之后,得知C#提供了三种类型的语句:标签语句、声明语句、嵌入式语句。
第一种:标签语句
static void Main(string[] args) { goto label; System.Console.WriteLine("由于使用了goto语句"); System.Console.WriteLine("所以中间的这些不会执行"); label: System.Console.WriteLine("撒浪嘿哟"); }
解析:上面通过一个例子,简单认识一下什么是标签语句。标签语句一般搭配goto语句来使用(能够改变程序运行的逻辑)。
第二种:嵌入式语句
顾名思义,它可以嵌套在别的语句中使用。嵌入式语句包含的范围很广,它能够继续细分为:块语句;表达式语句;选择语句;迭代语句;跳转语句;try..catch...finally语句;checked/unchecked语句;lock语句;using语句;yield语句;空语句。
什么是块语句?
static void Main(string[] args) { { var a = 10; System.Console.WriteLine("a"); } }
解析:中间部分的花括号就是块语句。
块语句发明的目的是:块语句就是用来解决某些地方只能写一条语句的情况。
如何证明这点?
例子:当a值大于90输出优秀,爱你两句话。
static void Main(string[] args) { var a = 100; if (a > 90) System.Console.WriteLine("优秀"); System.Console.WriteLine("爱你"); }
输出:
优秀
爱你
上面的输出看似没有问题,并且能够满足我们的需求。
现在将a值改成80,预期应该是一句都不会输出的,下面我们看下结果。
static void Main(string[] args) { var a = 80; if (a > 90) System.Console.WriteLine("优秀"); System.Console.WriteLine("爱你"); }
输出:
爱你
问题出现了,和我们预想的不一致,这是因为:if()后面只能写一条语句,当我们写了两条语句时,它只会把离他最近的语句当成复符合条件的语句去执行。
所以,这个时候,块语句就能够帮我们解决遇到的问题,
即:当程序某些位置只能出现一条语句,但我们的逻辑复杂,一条语句不能满足要求时,可以使用块语句:
static void Main(string[] args) { var a = 80; if (a > 90) { System.Console.WriteLine("优秀"); System.Console.WriteLine("爱你"); } }
再次运行程序,控制台无输出。与我们的预期吻合。
注意:从上面例子可以发现块语句除了可以包含多条语句的用途外,还作为if语句的嵌套语句存在。
第三种:声明语句
定义:声明语句是用来声明局部变量或局部常量的。声明语句可以出现在块中,但是不能作为嵌入式语句使用。
第一点:声明语句用来声明局部变量或者局部常量?那在类体中的属性声明不算声明语句么?不算。
using System; namespace statements { class Program { static void Main(string[] args) { var a = 80; if (a > 90) System.Console.WriteLine("哈哈"); } } class Person { public int Number { get; set; } } }
上述例子中,var a =80;就是一条声明语句。声明了一个局部变量a。但是在Person类中,public int Number { get; set; }并不是声明语句。
第二点:声明语句可以出现在块中,但是不能作为嵌入式语句使用?举个例子,便可理解。
static void Main(string[] args) { var a = 80; if (a > 90) var b = 88; if(a<=80) { var b = 88; } }
我们可以看一下,编译器给我们的提示:
第一条 声明语句 var b=88;作为了被嵌套在了if语句中,与声明语句的定义不符;第二条 声明语句 var b =88;被放到了块{}中。这是允许的。
总结:
1、标签语句不怎么用,声明语句用起来非常简单又非常常用,唯独需要花功夫去记忆的即使嵌套语句。
2、在上面块语句作为嵌套语句使用在if语句的例子中,忽然觉得,从前老师教的 if语句后面只写一条语句时,{}可以省略?---- 正常的解释是:if后面只能跟一条语句,若想执行多条语句时需要使用块语句,才对吧?
以上是对语句部分的总结,记录下来,以便以后查阅。