- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章C#程序设计语言解析
4.9 抽象类 4.9.1 什么是抽象类 在类声明中使用abstract修饰符的类称为抽象类。抽象类具有以下特点: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 抽象类中可以存在非抽象的方法。 不能用sealed修饰符修改抽象类,这也意味着抽象类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。 抽象类可以被抽象类所继承,结果仍是抽象类。 4.9.2 抽象方法 在方法声明中使用abstract修饰符以指示方法不包含实现的,即为抽象方法。抽象方法具有以下特性: 声明一个抽象方法使用abstract关键字。 抽象方法是隐式的虚方法。 只允许在抽象类中使用抽象方法声明。 一个类中可以包含一个或多个抽象方法。 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号{}。 抽象方法实现由一个重写方法提供,此重写方法是非抽象类的成员。 实现抽象类用“:”,实现抽象方法用override关键字。 在抽象方法声明中使用static或virtual修饰符是错误的。 抽象方法被实现后,不能更改修饰符。 【例4.10】 分析以下程序的运行结果。 using System; namespace Proj7_4 { abstract class A //抽象类声明 { abstract public int fun(); //抽象方法声明 } class B : A { int x, y; public B(int x1, int y1) //抽象方法实现 { x = x1; y = y1; } public override int fun() { return x * y; } } class Program { static void Main(string[] args) { B b = new B(2, 3); Console.WriteLine({0}, b.fun()); } } } 6 4.9.3 抽象属性 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法类似,另外,抽象属性具有如下特性: 在静态属性上使用abstract修饰符是错误的。 在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。 抽象属性声明不提供属性访问器的实现,它只声明该类支持属性,而将访问器实现留给其派生类。 【例4.11】 分析以下程序的运行结果。 using System; namespace Proj7_5 { abstract class A //抽象类声明 { protected int x = 2; protected int y = 3; public abstract void fun(); //抽象方法声明 public abstract int px { get;set; } //抽象属性声明 public abstract int py { get; } //抽象属性声明 } class B : A { public override void fun() //抽象方法实现 { x++; y++; } public override int px //抽象属性实现 { set { x = value; } get { return x + 10; } } public override int py //抽象属性实现 { get { return y + 10; } } } class Program {
文档评论(0)