抽象类、密封类及类成员(C# 编程指南)

转载 2013年12月03日 19:02:52

转自:http://kenchell.blog.163.com/blog/static/2608830920077244530648/

使用 abstract 关键字可以创建仅用于继承用途的类和类成员,即定义派生的非抽象类的功能。使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。有关更多信息,请参见如何:定义抽象属性(C# 编程指南)。

抽象类和类成员

可以将类声明为抽象类。方法是在类定义中将关键字 abstract 置于关键字 class 的前面。例如:

C# 
public abstract class A
{
// Class members here.
}

抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。

抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如:

C# 
public abstract class A
{
public abstract void DoWork(int i);
}

抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。例如:

C# 
// compile with: /target:library
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}

public abstract class E : D
{
public abstract override void DoWork(int i);
}

public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}

如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。

密封类和类成员

可以将类声明为密封类。方法是在类定义中将关键字 sealed 置于关键字 class 的前面。例如:

C# 
public sealed class D
{
// Class members here.
}

密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。

在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员。在用于以后的派生类时,这将取消成员的虚效果。方法是在类成员声明中将 sealed 关键字置于 override 关键字的前面。例如:

C# 
public class D : C
{
public sealed override void DoWork() { }
}

相关文章推荐

抽象类、密封类及类成员(C#)

使用 abstract 关键字可以创建不完整且必须在派生类中实现的类和类成员。使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。...

c# 中的抽象类、接口、密封类、虚方法介绍

1、抽象类 如果一个类没有具体的实现,只表现一种抽象概念,并且仅仅只作为自己派生类的一个基类出现,那么这样的类称作抽象类。抽象类中由abstract修饰的方法称之为抽象方法。 (1)抽象类声明和特...
  • wsl002
  • wsl002
  • 2015年01月15日 14:34
  • 369

基础_C# 继承,抽象类,密封类,类的多态性

C# 继承,抽象类,密封类,类的多态性类可以从其他类中继承。  新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的...
  • rise51
  • rise51
  • 2011年01月19日 15:55
  • 573

C#之抽象类、虚方法、重写、接口、密封类

前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷。每次敲代码的时候都没有一种随心所欲的感觉。所以不得不在网上搜集一些资料,look 了 look~ 内容   ...

.Net C#(类的继承/虚函数/抽象函数/密封类/静态类/抽象类)——学习笔记

类的继承 隐藏基类的成员: 派生类不可以删除它继承的任何成员,但可以隐藏他们。 要声明新的相同类型的成员,并使用相同的名称。 要使用new修饰符,否则编译器会警告。静态成员...

20160720(A) 继承总结/final/抽象类及其特点/抽象类中的成员/例题/与其他关键字的冲突

继承 --好处:提高代码的复用性,提高开发效率;--弊端:影响封装 class Father { viod show() { System.out.println("A"); } ...

静态函数 抽象类 覆盖-重写-重载 委托-事件-匿名函数 密封 Lambda表达式

下面叙述以C#语言为例,其它语言也有参考价值 1、静态函数    在类中定义静态函数,就不用实例化类了,直接用类名就可以访问了。在定义类的方法时,如果该方法与类的成员变量没有任何关系(也就是根本不会使...

C#成员访问和抽象类与接口

一.成员访问和属性 在定义类的时候我们要考虑成员的访问权限,在这里详细说明private加深大家对private的理解;如果类的成员是private那么在其他类中调用该类对象来访问它是非法的。下面举...

CAAnimation抽象类及子类的详解

核心动画的详解介绍:CAAnimation(抽象类)   1、核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象类、密封类及类成员(C# 编程指南)
举报原因:
原因补充:

(最多只允许输入30个字)