C#其他知识点
接口类---interface
什么是接口? 在接口当中一般我们认为接口中的成员都是抽象的。
接口一般认为是功能的集合。在接口类当中定义的方法都是抽象象方法。(没有方法体)
接口一般我们认为它是一种标准,一种规范,一种约定。
给子类或者是派生类制定规范,规定,标准。
当子类继承了该接口类,那么就需要重写该接口类中定义的所有的抽象方法,(需要在子类中添加方法的具体实现)
接口的出现,是为了给子类提供一种能力,实现多态。
//定义一个接口代表的是一种能力 public interface IFLyAble { void Fly(); } //定义一个class类Bird public class Bird : IFlyAble public void Fly() {} Console.WriteLine("鸟会飞"); 3 public class Program public static void Main(string[] args) IFlyAble flyAble = new Bird(); flyAble.Fly();接口类没有构造方法,也不能进行重载,所以接口不能实例化
接口类中的成员,不能添加任何修饰符,默认修饰符就是publicabstract
接口中的成员不能有任何的实现,属性不能有初始值,方法不不能有方法体都是以分号做结尾
在接口类中不能定义字段,一般定义属性(get和set)和方法。
接口类与接口类之间可以继承,并且可以实现多继承。单继承说的是由class定义的类,而由interface定义的类是可以多继承的。
//定义接口 public interface MyInterface01 { } public interface MyInterface02: MyInterface01 { } public interface MyInterface03: MyInterface01,MyInterface02{} public interface MyInterface04:MyInterface01,MyInterface02,MyInterface03{} public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInterface04 {}接口类不能继承class声明的类,但是class声明的类可以继承接口类,并且还可以继承多个接口类。
// 定义接口 public interface MyInterface01 /*: MyCLass*/ { }3 public interface MyInterface02: MyInterface01 { } public interface Myinterface03: MyInterface01,MyInteerface02{} public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { } public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {} //定义一个c1ass声明的类 public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{}一个class类在继承class类的时候同时还可以继承接口类,前提条件就是class类必须放在interface声明的接口类的前面
// 定义接口 public interface MyInterface01 /*: MyCLass*/ { }3 public interface MyInterface02: MyInterface01 { } public interface Myinterface03: MyInterface01,MyInteerface02{} public interface MyInterface04:MyInterface01,My1Interface02,MyInterface03 { } public interface MyInterface05:MyInterface01,MyInterface02,MyInterface03,MyInter face04 {} //定义一个c1ass声明的类 public class MyClass : MyInterface01,MyInterface202,MyInterface03,MyInterface04{} //定义一个c1ass声明的类 public class Myclass2:MyClass, Myinterface01, Myinterface02, Myinteerface03, Myinterface04{}接口只能继承接口,但是类可以继承接口也可以继承class类
如果一个抽象类继承了一个接口,那么该接口中的成员在抽象类中中也是必须实现的,需要进行方法重写。
当在程序当中定义了一个接口类,一般情况下我们会把接口的类名以"I"字母开头进行命名。
当一个类继承了多个接口,这多个接口当中有重名的方法,对于继承的子类来说,只需要在子类中重写一次即可。(如果重名的方法形参列
表不同,那么接口中定义了几个方法,子类就需要重写几个方法)
支持接口的显示实现
定义接口 public interface MyInterface01 /*: MyCLass*/ {} void Study(); public interface MyInterface02 : MyInterface01 { new void Study(); {} //定义一个子类MyC1ass3 public class Myclass3 : MyInterface01, MyInterface02 //支持接口的显示实现 void MyInterface01. Study() {} void MyInterface02.Study() { } //public void Study(int x) { } }接口的显示实现是为了解决子类中和接口中定义的重名方法 语法格式: 返回值类型接口名.方法名称(形参列表){方法体内容....}
public interface 接口名称 { 抽象方法... }
其他知识点
SortedList集合
SortedList它是一个双列(键值对)排序集合,其中的键自动按照顺序进行排序。
该集合既可以使用带有泛型的特征,也可以不使用带有泛型的特证。
SortedList它是Hashtable和Array的结合体。
当使用Key来访问集合当中的元素时,其行为类似于Hashtable,当使用下标索引GetBylndex()和SetByIndex()来访问集合当中的元素时,其行为类似于Array数组。
//创建SortedList集合对象 SortedList sortedList = new SortedList();//无序添加输出是带有排序 //添加一些元素 sortedList.Add(3,"张三"); sortedList.Add(5,"王五"); sortedList.Add(7, "田七"); sortedList.Add(4,"李四"); sortedList.Add(6,"赵六"); sortedList.Add(8,"周八") sortedList.Add(1,"天一") // 遍历查看 ICollection keys = sortedList.Keys; foreach(var key in keys)//var它是一个可变类型 { object value = sortedList[key];//通过key获取value Console.WriteLine(key +"---->" + value); }
常用方法
高级方法
排序特征
如果我们想要实现自定义排序,需要让SortedList中的Key实现一个ICompare<T>接口
例子:
比较规则
只要是比较:规则如下:=0,位置相同不改变0---->x在y前 <0--->x在y后
设计模式
23种设计模式:对象创建型 结构型 行为型
依据面向对象编程六大设计原则:单一原则,接口隔离原则,依赖倒置原则,迪米特原则等等
单例模式
属于对象创建型中的其中一种
该模式的目的就是确保在程序运行过程中某一个类有且仅有一个实例。并且需要提供一个全局访问点来访问这个类的唯一实例。
有两种实现方式:懒汉式(延时获取)、饿汉式(及时获取)