抽象类无法实例化。 如果一个类至少包含一个抽象方法,则也必须将其声明为抽象方法。 抽象方法无法实现; 他们只是声明方法的签名。 当我们从抽象类继承时,所有抽象方法都必须由派生类实现。 此外,必须以较少受限制的可见性声明这些方法。
与接口不同,抽象类可能具有完全实现的方法,并且可能具有定义的成员字段。 因此,抽象类可以提供部分实现。 程序员经常将一些通用功能放入抽象类中。 这些抽象类随后会被子类化以提供更具体的实现。 例如,Qt 图形库具有QAbstractButton
,它是按钮小部件的抽象基类,提供按钮所共有的功能。 按钮Q3Button
,QCheckBox
,QPushButton
,QRadioButton
和QToolButton
都从此基本抽象类继承。
正式地说,抽象类用于强制执行协议。 协议是所有实现对象都必须支持的一组操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
Program. using System; namespace AbstractClass { abstract class Drawing { protected int x = 0; protected int y = 0; public abstract double Area(); public string GetCoordinates() { return string.Format("x: {0}, y: {1}", this.x, this.y); } } class Circle : Drawing { private int r; public Circle(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } public override double Area() { return this.r * this.r * Math.PI; } public override string ToString() { return string.Format("Circle at x: {0}, y: {1}, radius: {2}", this.x, this.y, this.r); } } class Program { static void Main(string[] args) { var c = new Circle(12, 45, 22); Console.WriteLine(c); Console.WriteLine("Area of circle: {0}", c.Area()); Console.WriteLine(c.GetCoordinates()); } } }
我们有一个抽象基类Drawing
。 该类定义两个成员字段,定义一个方法并声明一个方法。 一种方法是抽象的,另一种是完全实现的。 Drawing
类是抽象的,因为我们无法绘制它。 我们可以画一个圆,一个点或一个正方形。 Drawing
类对我们可以绘制的对象具有一些通用功能。
abstract class Drawing
我们使用abstract
关键字定义一个抽象类。
public abstract double Area();
抽象方法之前还带有abstract
关键字。
class Circle : Drawing
圆是Drawing
类的子类。 它必须实现抽象的Area()
方法。
1 2 3 4
public override double Area() { return this.r * this.r * Math.PI; }
当我们实现Area()
方法时,必须使用override
关键字。 这样,我们通知编译器我们将覆盖现有的(继承的)方法。
1 2 3 4
$ dotnet run Circle at x: 12, y: 45, radius: 22 Area of circle: 1520.53084433746 x: 12, y: 45
C# 部分类
使用partial
关键字,可以将类的定义拆分到同一名称空间中的几个部分中。 该类也可以在多个文件中定义。
当使用非常大的代码库时可以使用部分类,这些代码库可以拆分为较小的单元。 局部类也与自动代码生成器一起使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Program. using System; namespace PartialClass { partial class Worker { public string DoWork() { return "Doing work"; } } partial class Worker { public string DoPause() { return "Pausing"; } } class Program { static void Main(string[] args) { var worker = new Worker(); Console.WriteLine(worker.DoWork()); Console.WriteLine(worker.DoWork()); Console.WriteLine(worker.DoPause()); } } }
在示例中,我们将Worker
类定义为两部分。 这些部分由编译器连接在一起以形成最终类。
标签:string,Area,C#,class,Drawing,抽象类,方法,public From: https://www.cnblogs.com/lvbjj/p/181158141 2 3 4
$ dotnet run Doing work Doing work Pausing