atstract抽象方式
来源:互联网 发布:易观千帆数据平台 编辑:程序博客网 时间:2024/05/29 14:58
bstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
在此例中,类 Square 必须提供 Area 的实现,因为它派生自 ShapesClass:
abstract class ShapesClass{ abstract public int Area();}class Square : ShapesClass{ int side = 0; public Square(int n) { side = n; } // Area method is required to avoid // a compile-time error. public override int Area() { return side * side; } static void Main() { Square sq = new Square(12); Console.WriteLine("Area of the square = {0}", sq.Area()); } interface I { void M(); } abstract class C : I { public abstract void M(); }}// Output: Area of the square = 144
抽象类具有以下特性:
抽象类不能实例化。
抽象类可以包含抽象方法和抽象访问器。
不能用 sealed(C# 参考) 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。
抽象方法具有以下特性:
抽象方法是隐式的虚方法。
只允许在抽象类中使用抽象方法声明。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。 例如:
public abstract void MyMethod();
实现由一个重写方法override(C# 参考)提供,此重写方法是非抽象类的一个成员。
在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
在静态属性上使用 abstract 修饰符是错误的。
在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
有关抽象类的更多信息,请参见抽象类、密封类及类成员(C# 编程指南)。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类可以将接口方法映射到抽象方法上。 例如:
interface I{ void M();}abstract class C : I{ public abstract void M();}
在本例中,DerivedClass 类是从抽象类 BaseClass 派生的。 抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 X 和 Y。
abstract class BaseClass // Abstract class { protected int _x = 100; protected int _y = 150; public abstract void AbstractMethod(); // Abstract method public abstract int X { get; } public abstract int Y { get; } } class DerivedClass : BaseClass { public override void AbstractMethod() { _x++; _y++; } public override int X // overriding property { get { return _x + 10; } } public override int Y // overriding property { get { return _y + 10; } } static void Main() { DerivedClass o = new DerivedClass(); o.AbstractMethod(); Console.WriteLine("x = {0}, y = {1}", o.X, o.Y); } } // Output: x = 111, y = 161
在上面的示例中,如果尝试通过使用下面的语句将抽象类实例化:
BaseClass bc = new BaseClass(); // Error
将出现错误,指出编译器无法创建抽象类“BaseClass”的实例。
- atstract抽象方式
- 抽象的两种方式
- 匿名类方式实例抽象类
- 内存泄露方式;抽象类;虚函数;
- 抽象类中的属性初始化方式
- C++嵌套抽象类的继承方式
- 接口和抽象类的定义方式举例说明
- 接口和抽象类的定义方式举例说明(转)
- VB.NET抽象类应用方式剖析(转帖)
- AS3抽象类的几种实现方式
- WCF接口、抽象类等数据契约传递方式
- Android抽象任务管理框架QTaskManager及其使用方式介绍
- C++抽象编程——数据文件的各种输出方式
- Android抽象任务管理框架QTaskManager及其使用方式介绍
- Linux内核:IO设备的抽象管理方式
- 抽象
- 抽象
- 抽象
- 打印矩阵
- 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)
- Oracle查询重复数据与删除重复记录方法
- C++11 理解 (二十一) 之 散列表
- 游戏服务器架构探讨
- atstract抽象方式
- windows下使用emacs启动报错Symbol's function definition is void: plist-to-alist
- Java--jdk1.5新特性线程池用法
- http 状态码详解
- JQuery 文字图片循环不间断滚动(向左)
- RedHead 6.4(32bit)安装Weblogic 12c(12.1.1)
- Js版游戏打砖块开发过程详细
- 字段初始值设定项不能引用非静态字段、方法或属性
- sizeof浅析