02011001 语句

02011001 语句

1. 标签语句

1.1 标签语句是什么
  • 标签语句有一个标识符后面跟着一个冒号再跟着一条语句组成。
Identifier : Statement

说明:
1. 标签语句的执行如同标签不存在一样,并仅执行Statement部分。
2. 给语句增加一个标签允许控制代码的其它部分转移到该语句。
3. 标签语句只允许用在块内部。
1.2 标签
  • 标签有它们自己的声明空间,所以标签语句中的标识符可以是任何有效的标识符。
    • 包括那些可能在重叠的作用域内声明的标识符,比如局部变量或参数名。
{
    int xyz = 0; // 变量xyz
    ...
    xyz : Console.WriteLine("Qinway"); // 标签xyz
}

说明:
1. 标签的标识符不能是关键字。
2. 标签不能在重叠范围内和另一个标签标识符相同。
1.3 标签语句的作用域
  • 标签语句在其所在的块的外部不可见(或不可访问)。标签语句的作用域如下。
    • 它声明所在的块。
    • 任何嵌套在该块内部的块。
图片链接丢失

2. goto语句

  • goto语句无条件的将控制转移到一个标签语句。
bool thingsAreFine;
while(true)
{
    thingsAreFine = GetNuclearReactorCondition();
    if(thingsAreFine)
        Console.WriteLine("Things are fine.")
    else
        goto NotSoGood;
}

NotSoGood : Console.WriteLine("We have a problem.");

说明:
1. goto语句可以调到它所在块内的任何标签语句,或跳出到任何嵌套它的块内的标签语句。
2. goto语句不能跳入嵌套在其所在块内部的任何块。

注意,使用goto语句是非常不好的,因为它会导致若结构化的,难以调试和维护的代码。

3. using语句

  • 某些类型的非托管对象有数量限制或很耗费系统资源,在代码使用完它们之后,尽快释放它们是非常重要的。using语句有助于简化该过程并确保这些资源被适当的处置。
  • 资源是指实现了System.IDisposable接口的类或结构。简单理解接口就是为实现的函数成员的集合,类和结构可以选择去实现它们。
  • 注意,using语句不同于using指令(如using System.Math)。

3.1 包资源的使用

  • using语句帮助减少意外的运行时错误带来的潜在问题,它整洁的包装了资源的使用。使用using语句的类或者接口必须实现了System.IDisposable接口。
  • 有两种形式的using语句。
3.2 using语句的第一种形式
using(ResourceType Identifier = Expression) Statement
                   ↑                          ↑
			   分配资源                   使用资源

说明:
1. ()内的代码分配资源。
2. Statement使用资源的代码。
3. using语句隐式产生处理该资源的代码。
图片链接丢失
  • 第一种形式的using语句执行如下任务。
    • 分配资源。
    • 把Statement放进try块。
    • 创建资源的Dispose方法的调用,并把它放进finally块。
3.3 using语句第一种形式使用示例
using System; // using指令,不是using语句
using System.IO; // using指令,不是using语句

namespace Demo01
{
    class Program
    {
        static void Main()
        {

            // using语句
            using(TextWriter tw = File.CreateText("Lincoln.txt"))
            {
                tw.WriteLine("Four score and seven years ago, ...");
            }

            // using语句
            using(TextReader tr = File.OpenText("Lincoln.txt"))
            {
                string InputString;
                while (null != (InputString = tr.ReadLine()))
                    Console.WriteLine(InputString);
            }

            Console.ReadLine();
        }
    }
}

控制台输出:
Four score and seven years ago, ...

说明:
1. TextWriter类和TextReader类,这两个类都来自System.IO命名空间,这两个类都实现了IDisposable接口。
2. CreateText资源创建一个Lincoln.txt文本文件。
3. TextWriter资源打开一个Lincoln.txt文本文件,并向该文件中写入一行。
4. using语句确保调用对象的Dispose方法。
  • using语句用于多种资源用法和示例
using(ResourceType Id1 = Expr1, Id2 = Expr2, ...) EmbeddedStatement
         ↑             ↑            ↑
    只有一个类型       资源         资源
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
using System; 
using System.IO; 

namespace Demo01
{
    class Program
    {
        static void Main()
        {

            using (TextWriter tw1 = File.CreateText("Lincoln.txt"),
                             tw2 = File.CreateText("Franklin.txt"))
            {
                tw1.WriteLine("Four score and seven years ago, ...");
                tw2.WriteLine("Earrly to bed; Early to rise...");
            }

            using(TextReader tr1 = File.OpenText("Lincoln.txt"),
                             tr2 = File.OpenText("Franklin.txt"))
            {
                string InputString;
                while (null != (InputString = tr1.ReadLine()))
                    Console.WriteLine(InputString);
                while (null != (InputString = tr2.ReadLine()))
                    Console.WriteLine(InputString);
            }

            Console.ReadLine();
        }
    }
}

控制台输出:
Four score and seven years ago, ...
Earrly to bed; Early to rise...
  • using语句的嵌套
using System; 
using System.IO; 

namespace Demo01
{
    class Program
    {
        static void Main()
        {
            using (TextWriter tw1 = File.CreateText("Lincoln.txt"))
            {
                tw1.WriteLine("Four score and seven years ago, ...");

                using (TextWriter tw2 = File.CreateText("Franklin.txt")) // 嵌套的using语句
                    tw2.WriteLine("Earrly to bed; Early to rise...");
            }

            using (TextReader tr1 = File.OpenText("Lincoln.txt"), // 多个资源的using语句
                 tr2 = File.OpenText("Franklin.txt"))
            {
                string InputString;
                while (null != (InputString = tr1.ReadLine()))
                    Console.WriteLine(InputString);
                while (null != (InputString = tr2.ReadLine()))
                    Console.WriteLine(InputString);
            }

            Console.ReadLine();
        }
    }
}

控制台输出:
Four score and seven years ago, ...
Earrly to bed; Early to rise...
3.4 using语句第二种形式使用示例
using(Expression) Statement
  ↑       ↑           ↑
关键字   资源       使用资源

说明:这种形式资源在using语句之前声明。
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
using System; 
using System.IO; 

namespace Demo01
{
    class Program
    {
        static void Main()
        {
            TextWriter tw = File.CreateText("Lincoln.txt"); // 第二种使用形式,需要先声明资源
            using (tw)
            {
                tw.WriteLine("Four score and seven years ago, ...");
            }

            using(TextReader tr = File.OpenText("Lincoln.txt")) // 第一种using语句使用形式。
            {
                string InputString;
                while (null != (InputString = tr.ReadLine()))
                    Console.WriteLine(InputString);
            }

            Console.ReadLine();
        }
    }
}

控制台输出:
Four score and seven years ago, ...

结尾

书籍:C#图解教程

著:【美】丹尼尔 · 索利斯;卡尔 · 施罗坦博尔

译:窦衍森;姚琪琳

ISBN:978-7-115-51918-4

版次:第5版

发行:人民邮电出版社

※敬请购买正版书籍,侵删请联系85863947@qq.com※

※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※

posted @ 2025-08-12 22:22  qinway  阅读(6)  评论(0)    收藏  举报