表达式的定义(Expressions)

  • 表达式是任何一门语言的基本组件之一(命令、声明),同样也是组件中最重要的。
  • 表达式这个语法实体的主要功能就是求值,(成功:得结果,失败:得异常)

    C#中表达式得具体定义

  • C#里面的表达式是一个或多个操作数零个或多个操作符组成的序列,主要功能同样是求值(single value、object、method、invovation

Single Value<

  1. int x = 100;
  2. x++;
  3. ++x;

Object<

  1. (new Form()).ShowDialog();

Method<

  1. // Console.WriteLine 就是方法
  2. Action myActino = new Action(Console.WriteLine);

Namespace<

  1. // System.Windows.Forms 名称空间访问表达式
  2. System.Windows.Forms.Form myForm = new Form();

各类表达式概览

13 14 15 16表达式,语句详解 - 图1
同样的表达式可以得出得返回值并不相同

C# 语言中表达式的分类

  • A value. Every value has an associated type.
    回顾上一节讲的操作符,并讲解由这些操作符组成的表达式所返回的类型。
    13 14 15 16表达式,语句详解 - 图2
  • 条件操作符?:总会返回精度高的那个类型:

    1. var x = 5>3?2:3.0;
    2. Console.WriteLine(x.GetType().FullName);
    3. // System.Double
  • A variable. Every variable has an associated type.

    1. int x = 100;
    2. int y;
    3. y = x;
  • A namespace.

    1. System.Windows.Forms.Form myForm = new Form();
  • A type.

    1. var t = typeof(Int32);
  • A method group
    Console.WriteLine,这是一组方法(19 种重载),重载决策决定具体调用那种方法。

  • A null literal.
    null 值也是一个值。

    1. Form myForm = null;
  • A property access.

  • An event access. ```csharp static void Main(string[] args) { var myForm = new Form(); // 访问属性 myForm.Text = “Hello”; // 访问事件 myForm.Load += MyForm_Load; myForm.ShowDialog(); }

private static void MyForm_Load(object sender, EventArgs e) { var form = sender as Form; if (form == null) { return; }

  1. form.Text = "New Title";

}

  1. - An indexer access.
  2. ```csharp
  3. var intList = new List<int>() {1, 2, 3 };
  4. var x = intList[2];
  • Nothing.对返回值为 void 方法的调用
    13 14 15 16表达式,语句详解 - 图3

    语句的定义

  • 语句是高级语言才有的语法-汇编语言和机器语言只有指令


  • 反编译可执行文件(exe)

  • 在计算机的开始界面搜索 visual studio会看到 visual studio tools文件夹

  • 在文件夹中找到 Developer Command Prompt(开发人员命令提示符)
  • 以管理员权限运行,并在小黑框第一行输入 ildasm(il:中间语言,dasm:反编译)
  • 文件 > 打开
  • image.png可查看名称空间,函数

    实例演示控制流(flow of control)

  1. static void Main(string[] args)
  2. {
  3. string input = Console.ReadLine();
  4. try //抓取异常
  5. {
  6. double score = double.Parse(input); //将input解析
  7. if (score >= 60) //解析成功
  8. {
  9. Console.WriteLine("Pass!");
  10. }
  11. else
  12. {
  13. Console.WriteLine("Failed!");
  14. }
  15. }
  16. catch //解析失败
  17. {
  18. Console.WriteLine("Not a number!");
  19. }
  20. }

13 14 15 16表达式,语句详解 - 图5

程序没变,控制流变了。
13 14 15 16表达式,语句详解 - 图6