C#学习笔记2

接口与抽象类的比较:接口与抽象类有相似之处,两者都可以定义一组方法和属性,都不能被创建实例,只能用做别的类的基类。但不同之处如下:
1)在抽象类中可以定义变量,而接口不可以;
2)在抽象类中可以定义构造函数,但接口不可以;
3)在抽象类中可以定义非公共成员,接口中只能定义public的成员;
4)抽象类中的非抽象方法可以有方法体,即实现的代码,而接口中的方法只能有定义,不能有实现;
5)由于C#只允许一个类拥有一个直接父类,所以一旦一个类继承了某个抽象类,那么就无法再继承别的抽象类了。也就是说,抽象类的继承具有惟一性和排他性。而从接口继承却不存在这个问题。一个类继承于某个接口,并不影响这个类再继承其他接口或抽象类。
===================================================================
抽象类和密封类:在定义类时,可以使用abstract关键字声明这个类是抽象的。抽象类不能被实例化,即不能创建抽象类的实例。抽象类的主要作用是充当其他类的基类。
密封类的概念正好与抽象类相对,这种类不能充当别的类的基类。“密封”的含义是指不可以从这个类派生别的类。在定义类时,使用sealed关键字指明类是密封的。
    抽象类中可以包含一种特殊的方法即抽象方法。抽象方法只有方法签名,没有方法体。声明抽象方法的语法如下:
   访问修饰符 abstract 返回类型 方法名(参数列表);
抽象方法只能包含在抽象类中,而且派生类必须重写父类中的抽象方法
===================================================================

当基类和派生类都定义了相同签名的方法时,C#允许开发人员明确指定哪个方法应该被调用。是根据变量的定义类型调用相应的方法,还是根据变量的实际类型调用相应的方法,C#通过虚方法、方法重写和方法隐藏实现这个功能。
    如果想让程序在运行时根据变量的定义类型来决定执行哪个方法,可以通过方法隐藏来实现;如果想让程序呈现多态性,即在运行时根据变量的实际类型调用相应方法,那么可以通过虚方法和方法重写来实现。
    定义一个方法时,使用new关键字可以隐藏基类具有相同签名的方法,语法如下:
       访问修饰符 new 返回类型 方法名(参数列表) { 方法体 }
    使用virtual关键字可以定义一个虚方法,虚方法可以在派生类中被重写。定义一个虚方法的语法如下:
       访问修饰符 virtual 返回类型 方法名(参数列表) { 方法体 }
    派生类使用override关键字重写基类中定义的虚方法,语法如下:
       访问修饰符 override 返回类型 方法名(参数列表) { 方法体 }
================================================================
类也有静态类和非静态类之分。静态类在声明时前面有一个static关键字。静态类只能包含静态成员,而且不能创建静态类的实例。除这两个限制条件外,静态类与非静态类是相同的

转载于:https://my.oschina.net/u/1428494/blog/278641

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值