C#第二节

1、表达式 由 操作数 (operand) 和 运算符 (operator) 构成

  • 运算符指示对操作数适用什么样的运算。 运算符的示例包括 +、-、*、/ 和 new
  • 操作数的示例包括文本、字段、局部变量和表达式

2、语句,程序的操作是使用 语句 (statement) 来表示的

  • 块 (block) 用于在只允许使用单个语句的上下文中编写多条语句。块由位于一对大括号 { 和 } 之间的语 句列表组成。
  • 声明语句 (declaration statement) 用于声明局部变量和常量
  • 表达式语句 (expression statement) 用于对表达式求值。可用作语句的表达式包括方法调用、使用 new 运 算符的对象分配、使用 = 和复合赋值运算符的赋值,以及使用 ++ 和 -- 运算符的增量和减量运算。 
  • 选择语句 (selection statement) 用于根据表达式的值从若干个给定的语句中选择一个来执行。这一组语句 有 if 和 switch 语句。 
  • 迭代语句 (iteration statement) 用于重复执行嵌入语句。这一组语句有 while、do、for 和 foreach 语 句。 
  • 跳转语句 (jump statement) 用于转移控制。这一组语句有 break、continue、goto、throw、return 和 yield 语句。 
  • try...catch 语句用于捕获在块的执行期间发生的异常,try...finally 语句用于指定终止代码,不管是 否发生异常,该代码都始终要执行。
  • checked 语句和 unchecked 语句用于控制整型算术运算和转换的溢出检查上下文。
  • lock 语句用于获取某个给定对象的互斥锁,执行一个语句,然后释放该锁。
  • using 语句用于获得一个资源,执行一个语句,然后释放该资源。 
  •  

     

3、yield 关键字向编译器指示它所在的方法是迭代器块(这个不懂

4、类是C#中一种基本类型,也是引用类型。

  • 类的实例,就是使用new关键字创建 

5、类的成员或者是 静态成员 (static member),或者是 实例成 员 (instance member)。静态成员属于类,实例 成员属于对象(类的实例)。 

 

 

 

 6、类可以有类型参数

  • 类定义可以通过在类名后添加用尖括号括起来的类型参数名称列表来指定一组类型参数。类型参数可用于在类声明体中定义类的成员。
  • 要声明为采用类型参数的类类型称为泛型类类型结构类型、接口类型和委托类型也可以是泛型

 

 

7、当使用泛型类时,必须为每个类型参数提供类型实参:

Pair<int,string> pair = new Pair<int,string> { First = 1, Second = “two” }; 
int i = pair.First;     // TFirst is int
string s = pair.Second; // TSecond is string

   提供了类型实参的泛型类型(例如上面的 Pair<int,string>)称为构造的类型。 

 

 8、基类:声明类类型后添加冒号指定一个基类,没有指定则默认基类是object,有基类的类则叫做派生类

  • 类继承基类的成员,就是隐式的将基类的成员当做自己的成员,但基类的实例构造函数、静态构造函数和析构函数除外
  • 从某个类类型到它的任何基类类型存在隐式的转换。因此,类类型的变量可以引用该类的实例或任何派 生类的实例
    • public class Point { 
      public int x, y;
      public Point(int x, int y)
      {
      this.x = x;
      this.y = y;
      }
      }
      public class Point3D: Point
      {
      public int z;
      public Point3D(int x, int y, int z): base(x, y)
      {
      this.z = z;
        } } #既可以引用point的实例,也可以引用Point派生类的实例 Point a
      = new Point(10, 20); Point b = new Point3D(10, 20, 30);

9、字段:字段是与类或类的实例关联的变量

  • 使用 static 修饰符声明的字段定义了一个 静态字段 (static field)。一个静态字段只标识一个存储位置。 无论对一个类创建多少个实例,它的静态字段永远都只有一个副本。
  • 不使用 static 修饰符声明的字段定义了一个 实例字段 (instance field)。类的每个实例都为该类的所有实例字段包含一个单独副本

10、 readonly 修饰符声明只读字段 (read-only field),只读字段只能在声明的时候赋值或在同一个类中的构造函数中出现

11、方法(函数)是一种成员,用于实现可以由对象或类执行的计算或操作。

    • 静态方法 (static method) 通过类来访问。 实例方法 (instance method) 通过类的实例来访问。静态方法不对特定实例进行操作,并且只能

      直接访问静态成员。,实例方法对特定实例进行操作,并且 能够访问静态成员和实例成员,在调用实例方法的实例上,可以通过 this 显式地访问该实例  

  • 方法具有一个参数列表(可以传值或变量的引用),可带返回值不带则返回为空void
  • 可以有一组类型参数,用尖括号括起来的
  • 签名, 签名 (signature) 在声明该方法的类中必须唯一。方法的签名由方法的名称、类型参数的数目以及 该方法的参数的数目、修饰符和类型组成。方法的签名不包含返回类型

12、参数,用于向参数传递值或变量引用

  • 值参数
  • 引用参数:输入输出参数,引用参数使用 ref 修饰符声明。
  • 输出参数:输出参数:out
  • 参数数组:参数数组使用 params 修饰符声明。只有 方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。

13、虚方法、重写方法和抽象方法 

  • 若一个实例方法(不包含static修饰符)的声明中含有 virtual 修饰符,则称该方法为 虚方法 (virtual method)。若其中没有 virtual 修饰符,则称该方法为 非虚方法 (non-virtual method)。
  • 调用一个虚方法时,该调用所涉及的实例的运行时类型 (runtime type) 确定了要实际调用的方法实现。在非虚方法调用中,实例的 编译时类型 (compile-time type) 负责做出此决定。

  • 虚方法可以在派生类中 重写 (override)。当某个实例方法声明包括 override 修饰符时,该方法将重写所 继承的具有相同签名的虚方法

  • 抽象 (abstract) 方法是没有实现的虚方法。抽象方法使用 abstract 修饰符进行声明,并且只允许出现在 同样被声明为 abstract 的类中。抽象方法必须在每个非抽象派生类中重写。 

  • 方法重载 (overloading) 允许同一类中的多个方法具有相同名称,条件是这些方法具有唯一的签名。 

14、其他函数成员:可执行代码的成员统称为类的 函数成员 。其他函数:构造函数、属性、索引器、事件、运算符和析构函数

   

 

 

 

 

 

 14、构造函数:实例构造函数和静态构造函数(包含static字段修饰)。 实例构造函数 (instance constructor) 是实现初始化类实例所需操作的成员。 静态构造函数 (static constructor) 是一种用于在第一次加载类本身时实现其初始化所需操作的成员

  • 实例构造函数使用 new 运算符进行调用。
  • 实例构造函数可以被重载,不能被继承
  • 如果没有为某个类提供任何实例构造函数,则将自动提供一个不带参数的空的实 例构造函数。 
  • 属性有 访问器 (accessor),这 些访问器指定在读取或写入它们的值时需执行的语句
  1. 不同的是属性声明以位于定界符 { 和 } 之间的一个 get 访问器和/或一个 set 访问器结束
  2. 只有 get 访问器的属性是 只读属性 (read-only property),只有 set 访问器的属性是 只写属性(write-only property)。

  3. C# 同时支持实例属性和静态属性。静态属性使用 static 修饰符声明,而实例属 性的声明不带该修饰符
  4. 属性的访问器可以是虚的。当属性声明包括 virtual、abstract 或 override 修饰符时,修饰符应用 于该属性的访问器
  • 索引器类似于属性,但不同的是索引器的访问器采用了参数。被称为有参属性。
  1. 索引器的索引值不受类型限制。用来访问数组的索引值一定是整数,而索引器可以是其他类型的索引值。

  2. 索引器允许重载,一个类可以有多个索引器。

  3. 索引器不是一个变量没有直接对应的数据存储地方。索引器有get和set访问器。
  4. 所有索引器都使用this关键词来取代方法名。Class或Struct只允许定义一个索引器,而且总是命名为this。
  • 事件 (event) 是一种使类或对象能够提供通知的成员。事件的声明与字段类似,不同的是事件的声明包 含 event 关键字,并且类型必须是委托类型
  • “引发一个事件” 与“调用一个由该事件表示的委托”这两个概念完全等效, 
  • 客户端通过 事件处理程序 (event handler) 来响应事件。事件处理程序使用 += 运算符附加,使用 -= 运算 符移除
  • 运算符 (operator) 是一种类成员,它定义了可应用于类实例的特定表达式运算符的含义。
  • 定义三类 运算符:一元运算符、二元运算符和转换运算符。所有运算符都必须声明为 public 和 static

 

 

 

 15、接口:定义了一个可由类和结构实现的协定。接口可以包含方法、属性、事件和索引器。类或结构隐式的继承接口的类型

16、委托:表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数 指针不同,委托是面向对象的,并且是类型安全的。

 17、特性 attribute:该特性可放置在程序实体上,以便提供指向其关联文档的 链接

  • 特性类的公共构造函数控制在将特性附加到程序实体时,必须提供的信息。可以通过引 用特性类的公共读写属性提供附加信息
  • 使用反射在运行时检索给定程序实体的特性信息 using System.Reflection;
  • 当通过反射请求特定特性时,将使用程序源中提供的信息调用特性类的构造函数,并返回生成的特性实 例。如果通过属性提供了附加信息,那些属性将在返回特性实例之前被设置为给定的值。

 

posted on 2020-03-04 14:29  HelloOcean  阅读(171)  评论(0)    收藏  举报

导航