您的位置:首页 > 编程语言 > C#

C# 抽象类和抽象方法知识总结

2013-11-20 21:49 393 查看
1 抽象类不能被实例化

 定义抽象类AbstractClass:

abstract class AbstractClass
{
public abstract void AbstractMethod1();
public abstract void AbstractMethod2();
}

对其实例化:

AbstractClass acec = new AbstractClass();

会提示:

无法创建抽象类和接口的实例。

就算为抽象类定义公开的构造方法,同样也是无法实例化的。

因为设计抽象类的初衷就是被用来继承的,而不是为了实例化的。

 

2 抽象方法没有方法主体

很显然下面的代码会出错,会提示:方法AbstractMethod1无法声明主体,因为它被标记为abstract。

abstract class AbstractClass
{
public abstract void AbstractMethod1()
{
Console.WriteLine("AbstractMethod1");
}
}

抽象方法必须在子类中重写。

 

3 如果类包含抽象方法,类必须是抽象类

下面的代码同样是不对的,会提示:方法AbstractMethod1是抽象的,但是它包含在非抽象类AbstractClass中。

class AbstractClass
{
public abstract void AbstractMethod1();
}

 

4 抽象类可以包含非抽象的方法

下面的代码是正确的。

abstract class AbstractClass
{
public abstract void AbstractMethod1();
public abstract void AbstractMethod2();
public void NotAbstractMethod3(){ }
}

其中的方法NotAbstractMethod3就是非抽象方法,只是该方法对其他类不可见,只对抽象类的子类可见。

 

5 继承的子类没实现其中所有的抽象方法,那么这个子类也是抽象类

abstract class AbstractClass
{
public abstract void AbstractMethod1();
public abstract void AbstractMethod2();
}
class ChildClass:AbstractClass
{
public override void AbstractMethod1()
{
Console.WriteLine("AbstractMethod1");
}
public override void AbstractMethod2()
{
Console.WriteLine("AbstractMethod2");
}
}

abstract class AbstractChildClass:AbstractClass
{
public override void AbstractMethod1()
{
Console.WriteLine("AbstractMethod1");
}
}

上面的代码中,ChildClass类实现了抽象类AbstractClass的所有方法,所以为非抽象类,但是AbstractChildClass类并没有实现抽象类AbstractClass的所有方法,所以自己也必须声明为抽象类,否则会提示:AbstractChildClass不实现继承的抽象成员AbstractMethod2()。

 

6 抽象方法也是虚拟的,但是不需要提供关键字virtual

下面的代码会报错,提示:方法必须声明主体,因为它未标记为abstract,extern,partial。

abstract class AbstractClass
{
public virtual void AbstractMethod1();
public virtual void AbstractMethod2();
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息