宠物兔的寿命,仙鸢,妖精的独步舞2
继承概念
承用于创建可重用、扩展和修改在其他类中定义的行为的新类
创建一个类的时候,不是要写全新的数据成员和成员函数,可以指定新的类继承一个已经存在的类的成员。已有的类称为基类,新的类称为派生类
派生类只能有一个直接基类,但一个基类可以有多个直接派生类
例如classanimal派生出classmammals,classmammals派生出classhuman,则classhuman会继承classmammals和classanimal中声明的成员
继承特点
派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义
继承是可以传递的。如果c从b中派生,b又从a中派生,那么c不仅继承了b中声明的成员,同样也继承了a中声明的成员
object类是所有类的基类。c#中的类都直接的或者间接的从object类继承
构造函数和析构函数不能被继承,除此之外其他成员能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖已继承的成员,但这兵不是删除了这些成员,只是不能再访问这些成员
类可以定义虚方法、虚属性及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性
派生类只能从一个类中继承,可以通过接口来实现多重继承
基本语法
1 class myclass : baseclass 2 { 3 // 方法体 4 }
如果在类定义中没有指定基类,默认system.object是基类
虚方法
将一个基类函数声明为virtual,则在任何一个派生类中可以重写该函数
1 clss baseclass 2 { 3 public virtual void virtualmethod() 4 { 5 // 方法体 6 } 7 }
在派生类中使用override重写函数
1 class myclass :baseclass 2 { 3 public override void virtualmethod() 4 { 5 // 方法体 6 } 7 }
将属性声明为virtual
1 public virtual string name 2 { 3 get;set; 4 }
隐藏方法
在没有声明virtual和override的情况下,签名相同的方法在基类和派生类中都进行了声明
在派生类方法中会隐藏基类方法
但是隐藏方法会造成对于给定类的实例调用错误的方法
c#语法在编译时会收到这个潜在错误的警告
所以要隐藏一个方法时用new关键字声明,会避免编译时就发出警告错误
1 class classbase 2 { 3 public void basemethod() 4 { 5 // 方法体 6 } 7 } 8 9 10 class myclass : classbase 11 { 12 public new void myclass() 13 { 14 // 方法体 15 } 16 }
抽象类
c#允许把类和函数声明为abstract
抽象类不能实例化,而抽象不能直接实现,必须在非抽象的派生类中重写
如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的
抽象类中不能声明非抽象方法,但可以声明其它的非抽象成员
抽象类语法:
1 abstract class myclass 2 { 3 public abstract void mymethod(); 4 }
抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块
抽象类的派生类必须实现所有抽象方法
当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法
密封类和类成员
密封类的声明是在类定义前面放置关键字 sealed
密封类不能用作基类
密封类禁止派生
在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员
方法是在类成员声明中将sealed关键字置于override关键字的前面
1 public sealed class classsealed 2 { 3 // 属性,方法 4 } 5 6 public class classsunsealed : classsealed 7 { 8 public sealed override void sealdmethod() { } 9 }
接口
接口是一种引用类型,有点像仅包含抽象成员的抽象基类
类在从接口实现时必须为该接口的所有成员提供实现。 类虽然只能从一个直接基类派生,但可以实现多个接口
不能实例化接口,接口即不能有构造函数,也不能有字段。接口定义也不允许包含运算符重载
接口中不允许声明关于成员的修饰符,但是可以在实现的类中作声明
接口成员总是公有的
实现接口的类必须实现接口的所有成员
接口之间的继承和类的继承方式相同
1 public interface idisposable 2 { 3 void dispose(); 4 }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论