C# Abstract抽象关键字示例
using System;
namespace ProgramCall
{
//Abstract class
abstract class Shape1
{
protected float R, L, B;
//Abstract methods can have only declarations
//cannot have method body
public abstract float Area();
public abstract float Circumference();
}
class Rectangle1 : Shape1
{
public void GetLB()
{
Console.Write("Enter Length : ");
L = float.Parse(Console.ReadLine());
Console.Write("Enter Breadth : ");
B = float.Parse(Console.ReadLine());
}
//must be override all the abstract method
public override float Area()
{
return L * B;
}
public override float Circumference()
{
return 2 * (L + B);
}
}
class MainClass
{
//Class containing abstract method cannot be instantiated
public static void Calculate(Shape1 S)
{
Console.WriteLine("Area : {0}", S.Area());
Console.WriteLine("Circumference : {0}", S.Circumference());
}
static void Main()
{
Rectangle1 R = new Rectangle1();
R.GetLB();
Calculate(R);
Console.WriteLine();
Console.Read();
}
}
}
C# virtual 关键字
- 虚拟方法具有实现,其派生类不必再次实现它(但可以替换原始实现)。
- 虚拟方法可以具有方法主体。
- 如果我们觉得派生类可能或者可能不会覆盖基类方法,那么我们将将基类方法定义为虚拟。
- 虚拟方法不需要强制覆盖。
- 可以实例化包含虚拟方法的类。
- 使用虚拟修改程序时存在限制。我们无法使用此修改程序以及静态或者抽象或者覆盖修饰符。
C# virtual关键字示例
using System;
namespace ProgramCall
{
class Shape
{
protected float R, L, B;
//A virtual method has an implementation
//Virtual method can have a method body
public virtual float Area()
{
return 3.14F * R * R;
}
public virtual float Circumference()
{
return 2 * 3.14F * R;
}
class Rectangle : Shape
{
public void GetLB()
{
Console.Write("Enter Length : ");
L = float.Parse(Console.ReadLine());
Console.Write("Enter Breadth : ");
B = float.Parse(Console.ReadLine());
}
public override float Area()
{
return L * B;
}
public override float Circumference()
{
return 2 * (L + B);
}
static void Main()
{
//Class containing virtual method can be instantiated
Shape s = new Shape();
s.Area();
Rectangle R = new Rectangle();
R.GetLB();
Console.WriteLine("Area : {0}", R.Area());
Console.WriteLine("Circumference : {0}", R.Circumference());
Console.Read();
}
}
}
}
C# Abstract
- 一个抽象方法没有实现,它的派生类必须实施它。
- 抽象方法只有签名。它不能有方法体。
- 如果要强制执行派生类必须覆盖基类方法,则将基类方法定义为摘要。
- 抽象的方法应该被派生类覆盖。
- 包含抽象方法的类无法实例化。它只能继承。
- 摘要修饰符也有限制。它们不能与静态或者虚拟或者覆盖修饰符一起使用。
在C#中Abstract和Virtual关键字之间的区别?
Virtual和Abstract方法都用于允许派生类覆盖基类的方法,但具有一些差异,在本文中,我们将解释C#中的虚拟和抽象关键字之间的一些重要区别。
日期:2020-04-11 22:50:26 来源:oir作者:oir
