C#入门经典(读书笔记<二>)

2021-02-15 19:22

阅读:574

一、抽象类与接口

  (1)抽象类:

    1、类中的方法不提供具体实现,但该类的派生类必须实现这些方法,这些方法在C#中称为抽象方法。

      2、 抽象方法必须是一个没有被实现的空方法。包含抽象方法的类称为抽象类,抽象类中也可以包含非抽象方法。 因为抽象类是用来作为基类的,所以不能直接被外部程序实例化,而且也不能被密封。

      3、通过关键字abstract进行标记将类声明为抽象。 不能创建抽象类的对象,但可以创建抽象类的引用。 一个abstract类可以不包含抽象方法,可以包含非抽象方法和变量。 抽象方法是虚方法的特例。 构造函数和静态方法不能是抽象的。 一个非abstract类不能包含抽象方法。 子类若要覆盖抽象类的抽象方法时,要使用override关键字。 

  (2)接口:  

    接口成员访问权限为public,但不能加访问修饰符, 接口成员不能有定义。 接口的成员必须是方法,属性,事件或索引器,不能包含常数、字段、运算符、实例构造函数、析构函数或类型。

    接口和类的对比:

技术分享图片

 

二、is与as运算符

  is运算符:可以检查对象与类之间的关系,形式为:if ( obj is classname )…… ,可用于确定接口是否可用。

  as运算符:完成的功能等价于:先用is检查,再执行对象类型转换。 如果类型不兼容,as运算返回null。

三、委托与事件(还是不太明白!!!)

  (1)委托:是一种可以指向方法的引用,可以理解为一种函数指针,是类型安全的。它类似于C++中的函数指针,通过对于方法特征和返回值类型的声明,封装了具有相同特征和返回类型的方法。

    使用委托需要三个步骤: 声明委托类型 ==》创建委托实例 ==》 向委托实例注册方法。

技术分享图片技术分享图片
 1 class Delegates
 2 {
 3     // 委托定义
 4     public delegate int Call(int n1, int n2);    
 5     class Math
 6     {
 7         // 乘法方法
 8         public int Multiply(int n1, int n2)
 9         {
10             return n1*n2;
11         }
12     
13         // 除法方法
14         public int Divide(int n1, int n2)
15         {      
16         if(n2!=0)
17             return n1/n2;
18        else{
19                 Console.WriteLine("除数不能为零!");
20                 return -999999999;
21             }
22          }
23     }
24         
25         static void Main(string[] args)
26         {
27         // 委托的对象
28         Call objCall;
29         // Math 类的对象
30         Math objMath = new Math();
31         // 将方法与委托关联起来
32         objCall = new Call(objMath.Multiply);
33         // 将委托实例化
34         int result = objCall(4, 3);
35         System.Console.WriteLine("结果为 {0}", result);
36         }
37 }        
View Code

 

  (2)事件:语法——[访问修饰符] event 委托名 事件名; 


评论


亲,登录后才可以留言!