C#基础篇--静态成员、抽象成员、接口
2013-08-04 15:17
357 查看
1.静态成员:
静态成员(static)、静态类与实例成员、类:
静态成员属于类所有,非静态成员属于类的实例所有。
静态成员不能标记为 Virtual,Abstract,Override,也就是说静态成员不能实现多态。
静态成员创建后始终使用同一块内存(静态存储区),而使用实例成员的方式会创建多个内存。
静态类中只能声明静态方法和静态字段,静态方法只能访问静态成员变量。
由于静态成员是在整个程序退出时,才释放资源,所以尽量避免写静态字段或静态属性,最好只写静态方法。
当一个普通的类中有静态成员时,系统会默认添加一个静态的构造函数。
静态的构造函数,只会在第一次使用静态成员之前执行。并只执行一次,不管以后是否多次使用静态成员。
静态构造函数就是在该类名前加一个Static。
静态的构造函数不能有访问修饰符、并且也不能带参数。
静态成员就相当于Abstract和Sealed的结合体。
静态类不能被继承,静态类不能实现任何接口。
什么时候使用静态成员?
当多个对象共享同一个数据的时候就可以在实例类中加入静态成员。
什么时候使用静态类?
1.当这个类是一个工具类,里面都是方法,为了让用户调用的时候方便。(例如:系统中的convert、Math就是静态成员)
2.模拟“全局变量”的时候。例如:人类,每个人都是一个对象。而所有的人都居住在同一个星球----地球上
2.简单的介绍一下密封成员(Sealed)
密封类(sealed) ,是不能被继承的,密封方法。
在一个子类的重写方法前加上sealed关键字,这样这个方法以后就不能再重写了。
什么时候用密封类?
1.像String类,在.net系统中本身对字符串有很多特殊处理,为了防止别的类继承后造成混乱。
2.关于一些商业的问题,不想让别人知道你内部的信息。
3.抽象成员
抽象成员与抽象类:
抽象方法不能有任何方法体。用Abstract来标记。
抽象成员必须包含在抽象类中,不能写在一个实例类中。
父类中的抽象成员,子类继承必须重写,除非子类也是抽象类。
抽象类是不能被实例化的。
抽象成员访问修饰符不能是Private.
抽象类中可以包含实例成员。因此抽象类中有构造函数,虽然不能实例化。
抽象类就是为了让子类继承。(来实现多态),它定义的就是公共的实现和能力。
抽象方法不能用Static来修饰。
抽象类可以用来实现接口
抽象方法与虚方法使用时的区别:
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
注意:
1.抽象属性虽然与自然属性一样的写法,但不是同一种东东,抽象的属性必须在子类中重写。属性、索引器也是另一种方法的表现形态
2.如果子类中某一个方法与父类中某一个方法相同,如果不是用Override重写的,那么就要在前面加一个new,表示在子类中写了一个全新的方法,与父类没有关系。
4.接口(Interface)
定义:接口就是统一的规范,以I开头命名,以Able作结尾。
接口的使用:
接口中只能包含方法(方法、属性、索引器、事件),并且方法中不能有任何方法实现。因此接口中没有构造函数,并且不能被实例化。
接口中的成员不能有任何的访问修饰符,默认是Public。
当一个类同时继承了某个类,并且也实现了一个或多个接口时候,必须把继承的类写在第一个位置。
实现接口的类,必须实现接口中的所有成员,抽象类也可以实现接口。
类与接口是实现关系,而不是继承,因为接口就是规范。可以把接口理解成类的父类。
接口与接口之间也是可以有(继承)的关系的
在实现接口的时候可以把接口中的方法修改为Virtual或Abstract.
建议:在接口中不要写太多的方法。可以把多个方法分别写到各个接口中,要避免接口的污染。(例如:古代的活字印刷术有些相似)。
注意:
1.在计算机中就算类中已经把接口的那些规范都实现了,但没有继承接口,这样是错的,因为在计算机中必须实现接口,才能保证实现了这些规范。
2.在扩展原功能要修改原文件,修改原文件就会看到原代码,因此在写程序的时候要注意不要出现这个问题,要把变化的东东封装起来。我们要面向父类、面向接口编程。
3.能够写实例成员的类中一定就会有构造函数。
接口的好处:
解决了类的多继承的问题。
解决了类继承以后体积庞大的问题。
显示实现接口:
访问修饰符是Private.(根据反编译得到的)目地就是防止类来调用。
只有用接口才能调用。
接口名.方法名();并且没有访问修饰符。
并且能更好的解决方法重名的问题。
静态成员(static)、静态类与实例成员、类:
静态成员属于类所有,非静态成员属于类的实例所有。
静态成员不能标记为 Virtual,Abstract,Override,也就是说静态成员不能实现多态。
静态成员创建后始终使用同一块内存(静态存储区),而使用实例成员的方式会创建多个内存。
静态类中只能声明静态方法和静态字段,静态方法只能访问静态成员变量。
由于静态成员是在整个程序退出时,才释放资源,所以尽量避免写静态字段或静态属性,最好只写静态方法。
当一个普通的类中有静态成员时,系统会默认添加一个静态的构造函数。
静态的构造函数,只会在第一次使用静态成员之前执行。并只执行一次,不管以后是否多次使用静态成员。
静态构造函数就是在该类名前加一个Static。
静态的构造函数不能有访问修饰符、并且也不能带参数。
静态成员就相当于Abstract和Sealed的结合体。
静态类不能被继承,静态类不能实现任何接口。
什么时候使用静态成员?
当多个对象共享同一个数据的时候就可以在实例类中加入静态成员。
什么时候使用静态类?
1.当这个类是一个工具类,里面都是方法,为了让用户调用的时候方便。(例如:系统中的convert、Math就是静态成员)
2.模拟“全局变量”的时候。例如:人类,每个人都是一个对象。而所有的人都居住在同一个星球----地球上
2.简单的介绍一下密封成员(Sealed)
密封类(sealed) ,是不能被继承的,密封方法。
在一个子类的重写方法前加上sealed关键字,这样这个方法以后就不能再重写了。
什么时候用密封类?
1.像String类,在.net系统中本身对字符串有很多特殊处理,为了防止别的类继承后造成混乱。
2.关于一些商业的问题,不想让别人知道你内部的信息。
3.抽象成员
抽象成员与抽象类:
抽象方法不能有任何方法体。用Abstract来标记。
抽象成员必须包含在抽象类中,不能写在一个实例类中。
父类中的抽象成员,子类继承必须重写,除非子类也是抽象类。
抽象类是不能被实例化的。
抽象成员访问修饰符不能是Private.
抽象类中可以包含实例成员。因此抽象类中有构造函数,虽然不能实例化。
抽象类就是为了让子类继承。(来实现多态),它定义的就是公共的实现和能力。
抽象方法不能用Static来修饰。
抽象类可以用来实现接口
抽象方法与虚方法使用时的区别:
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
注意:
1.抽象属性虽然与自然属性一样的写法,但不是同一种东东,抽象的属性必须在子类中重写。属性、索引器也是另一种方法的表现形态
2.如果子类中某一个方法与父类中某一个方法相同,如果不是用Override重写的,那么就要在前面加一个new,表示在子类中写了一个全新的方法,与父类没有关系。
4.接口(Interface)
定义:接口就是统一的规范,以I开头命名,以Able作结尾。
接口的使用:
接口中只能包含方法(方法、属性、索引器、事件),并且方法中不能有任何方法实现。因此接口中没有构造函数,并且不能被实例化。
接口中的成员不能有任何的访问修饰符,默认是Public。
当一个类同时继承了某个类,并且也实现了一个或多个接口时候,必须把继承的类写在第一个位置。
实现接口的类,必须实现接口中的所有成员,抽象类也可以实现接口。
类与接口是实现关系,而不是继承,因为接口就是规范。可以把接口理解成类的父类。
接口与接口之间也是可以有(继承)的关系的
在实现接口的时候可以把接口中的方法修改为Virtual或Abstract.
建议:在接口中不要写太多的方法。可以把多个方法分别写到各个接口中,要避免接口的污染。(例如:古代的活字印刷术有些相似)。
注意:
1.在计算机中就算类中已经把接口的那些规范都实现了,但没有继承接口,这样是错的,因为在计算机中必须实现接口,才能保证实现了这些规范。
2.在扩展原功能要修改原文件,修改原文件就会看到原代码,因此在写程序的时候要注意不要出现这个问题,要把变化的东东封装起来。我们要面向父类、面向接口编程。
3.能够写实例成员的类中一定就会有构造函数。
接口的好处:
解决了类的多继承的问题。
解决了类继承以后体积庞大的问题。
显示实现接口:
访问修饰符是Private.(根据反编译得到的)目地就是防止类来调用。
只有用接口才能调用。
接口名.方法名();并且没有访问修饰符。
并且能更好的解决方法重名的问题。
相关文章推荐
- C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态
- C#基础:静态成员和静态类
- C#基础之----静态成员与非静态成员
- C#基础——静态成员,static关键字
- C#基础篇七类和静态成员
- c#基础知识---静态成员
- JavaSE8基础 接口的成员变量只能是静态的常量
- C#控制台基础 快速实现接口的中的所有成员,使用快捷键
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- C#的接口基础教程之三 定义接口成员
- [C#基础]4.类的静态成员示例
- C#基础知识之静态成员
- 第十周刷OJ题 统计程序设计基础课程学生的平均成绩(静态成员函数的使用复习)
- C#学习基础--抽象类、密封类及类成员
- c#基础:类与接口的学习
- C#基础-----接口实现多态
- 基于C#的接口基础教程之三
- C# 静态成员和静态类
- 基于C#的接口基础教程之七
- 深入理解C# 静态类与非静态类、静态成员的区别