C#的抽象类中,抽象方法和纯虚函数区别

2024-11-18 11:48:13
推荐回答(5个)
回答(1):

问题1:含有virtual修饰符的方法称为虚拟方法。不能像你说的那样定义。
问题2:
1)虚拟方法,子类可以选择性重写此方法,也可以不重写;而抽象(abstract
)方法,子类必须重写。

2)虚拟方法可以有实体,如:
public virtual void Vt()
{
Console.WriteLine("A");
}
所以,可以直接调用虚拟方法;而抽象方法不能声明方法实体,public abstract void Ab(),不能直接调用。
3)虚方法可以实现多态,而抽象方法不可以

回答(2):

问题1:含有virtual修饰符的方法称为虚拟方法。不能像你说的那样定义。
问题2:
1)虚拟方法,子类可以选择性重写此方法,也可以不重写;而抽象(abstract
)方法,子类必须重写。

2)虚拟方法可以有实体,如:
public virtual void Vt()
{
Console.WriteLine("A");
}
所以,可以直接调用虚拟方法;而抽象方法不能声明方法实体,public abstract void Ab(),不能直接调用。
3)虚方法可以实现多态,而抽象方法不可以
如果一个类被声明为abstract,
则在该抽象类中,可以存在没有实现的方法,但该方法须声明为abstract,
在其子类中,通过override关键字修辞并包含具体的实现

抽象类中的虚方法使用virtual关键字描述,并在子类中实现
与抽象方法不同的是,虚方法可以有具体的实现,而抽象方法不可以有实现,
类似于接口中规范的定义

回答(3):

如果一个类被声明为abstract,
则在该抽象类中,可以存在没有实现的方法,但该方法须声明为abstract,
在其子类中,通过override关键字修辞并包含具体的实现

抽象类中的虚方法使用virtual关键字描述,并在子类中实现
与抽象方法不同的是,虚方法可以有具体的实现,而抽象方法不可以有实现,
类似于接口中规范的定义

回答(4):

1.没有你说的纯虚函数,但是可以用委托通过匿名函数达到类似的效果。比如使用lambda表达式,x => x * 6指定名为x的参数并返回x的值计算的。如下面的示例所示,可以将此表达式传递给委托类型: 
delegate int del(int i);
static void Main(string[] args)
{
    del myDelegate = x => x * 6;
    int j = myDelegate(5); //j = 30 

2. 虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项;
   抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。

回答(5):

高质量认证每次进来都是好几年之前的问题了。