C#基础知识学习

继承和多态

接口与抽象类的区别:1、在接口中仅能定义成员,但是不能有具体的实现;抽象类除了抽象成员以外,其他成员有具体的实现。2、在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符;在抽象中能声明任何成员,并能使用任何修饰符来修饰。3、接口中能实用类或者结构体来继承,但抽象类仅能使用类继承。4、在使用类来实现借口时,必须隐式或者显式地实现接口中的所有成员,否则需要将实现类定义为抽象类,并将接口中未实现的成员以抽象的方式实现;在使用类来继承抽象类时允许实现全部或部分成员,但仅实现其中的部分成员,其实现类必须也定义为抽象类。5、一个接口允许继承多个接口,一个类只能有一个父类。

 

实现多态的两种方式: a.使用父类作为方法形参实现多态 b.使用父类作为方法返回值实现多态

 

sealed关键词的用法:

 

当一个类的方法被标识为virtual,则表示该方法为虚方法,虚方法可以后代所重写(后代包括子类、以及子类的子类)

sealed关键字可以有两种用途:

1、可以修饰在带有override的方法上,用来阻止其子类进一步重写该方法。

2、可以修饰到类上,用来阻止类被继承

C#基础知识学习
 1     class Test11_0
 2     {
 3         public  virtual string Fun()
 4         {
 5             return "这是类Test11_0";
 6         }
 7  
 8     }
 9  
10     class Test11_1 : Test11_0
11     {
12         public override string Fun()
13         {
14             return "这是类Test11_1";
15         }
16     }
17     class Test11_2 : Test11_1
18     {
19         public override string Fun()
20         {
21             return "这是类Test11_2";
22         }
23     }
24  
25     class Test11_3 : Test11_2
26     {
27         public override string Fun()
28         {
29             return "这是类Test11_3";
30         }
31     }
32     class Test12_0
33     {
34         public virtual string Fun()
35         {
36             return "这是类Test12_0";
37         } 
38     }
39     class Test12_1:Test12_0
40     {
41         public sealed override string Fun()
42         {
43             return "这是类Test12_1";
44         }
45  
46     }
47  
48     class Test12_2 : Test12_1
49     {
50         //这个类就不能再重写fun方法了
51     }
52  
53    sealed class Test13//该类不能被继承
54     {
55  
56  
57     }
View Code

 

虚方法跟抽象方法的区别:总结:抽象方法是只有方法名称,没有方法体(也就是没有方法具体实现),子类必须重写父类抽象方法;虚函数是该方法有方法体,但是子类可以覆盖,也可不覆盖。(1)虚方法有方法体,抽象方法没有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化;(2)抽象方法只能在抽象类中声明,虚方法不是;(3)派生类必须重写抽象类中的抽象方法,虚方法则不必要。

 

 

集合和泛类

集合与数组的区别:1、数组声明了元素的类型,集合不声明;2、数组是静态的,有固定大小,创建了就无法改变容量,而集合是动态扩展容量,可以根据需要改变大小;3、数组存放类型只能是一种,集合可以不是一种;4、数组易于存放与查找。

HashTable跟SortedList的区别:2者都是表示键/值对的集合,hashtable是没有排序的,所以新增元素会比较快,而SortedList 存储的键值对,是按key进行排序了的,因为要排序,所以新增元素时,要先查找元素的位置再插入,相对慢些,但是在查找时比较快

 

      

C#基础知识学习

上一篇:十二 windows临界区,其他各种mutex


下一篇:WPF 遍历资源字典中的控件