发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
1.抽象类
抽象类是一个类的抽象化描述,和普通类的定义成员的方法一样,只是如果要定义抽象成员的话,则需要使用到abstract关键字。通常在程序的设计中,把主体的类功能放在抽象类中,让其它类去继承。抽象类不能被实例化,除了使用多态性。所以它的天性就是被别人所继承;
定义示例:
abstract class Animal{
private string name;
private string color;
private int age;
//属性
public string Name{
set{
}
get{
return name;
public int Age{
if(age>0){
age = value;
return age;
public string Color{
return color;
color = value;
//抽象方法;叫声Yell
public abstract void Yell(){
Console.WriteLline(“我是动物,我会叫
”);
//当然这个类,描述的并不完整,只是为了表达抽象类
定义一个Dog类,继承这个抽象类
class Dog:Animal{
//如果Dog类没有覆盖(和复写一个意思)Animal中的抽象成员
//那么它也就变成抽象类了
public override void Yell(){
Console.WriteLine(“我是小狗,汪汪的叫”);
/*这里需要注意一点,那就是子类中覆盖基类的方法,权限修饰符必须大于等于基类中的权限修饰符。这样的话,它的权限就只能是protected,和public了,因为其他两个权限,根本就继承不到*/
2.密封类
密封类是相对于抽象类来说的,它通常描述放的事物都是非常的具体,这也就导致了,它的一个特性,那就是它不能被继承,它就是它,也只能是它,当然是可以实例化的;
普通的类中,也可以有密封的方法,但是密封的方法,在它的派生类中是覆盖不了的,也不允许这样的操作;
定义方法:
sealed class Apple{
//密封类主体,除了密封的特性外,其它和普通类无区别
3.接口
接口在定义的时候,虽然用的不是class关键字,而是interface。但是在实际的概念理解和操作中,我们都可以把它看作是一种特殊的抽象类,它里面的成员必须都是公共抽象的。而且函数不允许有函数体,它之所以这样做。其实是在定义一种标准。
举例说明,就比如说你的农业银行的银行卡,是可以到任意银行的ATM机上取款的(只是需要手续费),这是为什么呢?因为现在我们的银行卡都是银联所统一规范好的一种介质,而支持这种规范的ATM机,不管你使用什么样的银行卡,只要它符合银联制定的标准,那么我们就可以取到钱;
类比于接口,也是这样的,它定义了一个标准。任何实现了,该标准的类,我们都可以通过该标准来访问到它们(多态性的又一体现);
interface Run{
public abstract void Run();
interface Jump{
void Jump();
//接口在定义的时候其实里面的public和abstract可以省略,因为它们是默认的,不用写也是这样。
另外接口之间支持多继承,这样也就弥补了,类之间,不能多继承的缺陷;
interface Sport:Run,Jump{
//此时Sport中便具有了,另外两个接口中的所有成员;
在C#中是单继承,多实现的。当一个类即继承了类,又实现了多个接口的时候。只有一个规定,继承的类放在前面写,接口放在后面写,主要是为了区分;
class Dog:Animal,Run,Jump{
//复写抽象类中的抽象方法
4.覆盖和隐藏方法
子类从基类中继承之后,不仅可以选择使用override来覆盖掉,基类中的虚方法(抽象方法也属于虚方法),还可以使用new关键字来隐藏基类的虚方法,隐藏和覆盖的区别在于。如果父类的变量指向子类的实例的话,在覆盖掉父类的方法的话,如果不使用向上转型的话,这个变量,就永远也访问不到自己中的方法;
而隐藏就不一样了,如果父类引用指向子类的实例,它始终的指向基类中的原方法,我们所隐藏的方法,只属于派生类中,等于是新建了;
说明代码:
namespace 隐藏演示{class Program : Animal{static void Main(string[] args){Animal a = new Program();a.Show();a.Play();Console.ReadKey();}new public void Show() {Console.WriteLine("隐藏方法");}public override void Play(){Console.WriteLine("覆盖方法");}}
//动物类class Animal {public virtual void Show() {Console.WriteLine("show");}public virtual void Play() {Console.WriteLine("play");}}}
如上程序,运行的结果是show和覆盖方法,因为覆盖掉了基类中的方法,基类的变量就只能使用我们派生类中的方法,隐藏则是基类中的方法;
5.this和base关键字
this和base的作用差不多,它们的区别只要记住一点,this代表的是当前的对象,而base是基类的对象;
我总结了this的功能点主要有三个:1.可以在重载的构造函数中互相调用;
2.调用本类中的成员;
3.可以被当作当前对象的参数进行传递;
而base的作用,则可以对比着this的功能点看,只要将本类换成基类就可以了;
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C#虚方法和抽象方法
C#虚方法和抽象方法。1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑. 2、virtual方法可以直接使用,和普通方法一样 3、不...
C#基础方法和要点
B继承A A a=new B();B a=new B()区别
override的“覆盖”也就是次数重写是指子类覆盖了父类思路方法子类对象无法再访问父类中该思路方法。public void MethodA(){...} public virtual void MethodB(){...} }public new void MethodA(){...}...
C# 中类的成员有哪些?
C# 中类的成员有哪些?不是类的每个成员方法都可以作为密封方法密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。(2)虚拟方法、重写方法和抽象方法 若一个实例方法的声明中含有virtual修饰...
c#继承
WriteLine("我是基类的Print虚方法"); } } class Test2 : Test { public override void Print() { Console.WriteLine("我是子类重写了的Prin...
C#抽象类
abstract修饰符可以和类、方法、属性、索引器及事件一起使用,在类声明中使用abstract修饰符以表明这个类只能是其他类的基类。(3)如果在抽象类中定义一个protected构造函数,则在实例化派生类时,基类...
C#中A a=new B()的意义
这是因为父类引用指向子类的对象(实例)public virtual void G()隐藏(hide)是指派生类的函数屏蔽了与其同名的基类函数,其特征为: * 1)不同的范围(分别位于派生类与基类) * 2)相同的函数名 * 3)...
C#中的多态性
变量 a 调用 Animal 类的 Sleep 方法以及变量 c 调用 Cat 类的 Sleep 方法没有异议,但是变量 ac 引用的是一个 Cat 类型的对象,它应该...
C#学习笔记
C#学习笔记 之所以把this关键字放在类这个分类里面,是因为this只能在类的内部使用,使用他能访问类实例对象内部任何级别(不同类型的访问修饰符)的任何元素(字段,属性,方法等),但静态的类型...
微信扫码,在手机上查看选中内容