【C#】学习笔记 abstract、virtual、interface使用的一些栗子

abstract (C# Reference)

Abstract classes(抽象类) have the following features:

  • An abstract class cannot be instantiated. 

  • An abstract class may contain abstract methods and accessors.

  • It is not possible to modify an abstract class with the sealed modifier because the two modifiers have opposite meanings. The sealed modifier prevents a class from being inherited and the abstract modifier requires a class to be inherited.

  • A non-abstract class derived from an abstract class must include actual implementations of all inherited abstract methods and accessors.

①抽象类无法被实例化

  【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第1张图片

 【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第2张图片

②抽象类可以包含抽象方法和访问器

③抽象类无法用sealed修饰,因为这俩是相反的。sealed是用来阻止被继承的,而abstract是需要一个类来继承的。

④一个非抽象派生类必须实现继承来的所以抽象方法和访问器。

 1 namespace AbstractDemo
 2 {
 3     abstract class Shape
 4     {
 5         public abstract int GetArea();
 6 
 7     }
 8     class Square : Shape
 9     {
10         int side;
11         public Square(int n)
12         {
13             side = n;
14         }
15         //简写: public Demo(int n) => side = n;
16 
17         public override int GetArea()
18         {
19             return side * side;
20         }
21         //简写: public override int GetArea() => side * side;
22     }
23 }

 

 1 namespace AbstractDemo
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             Square square = new Square(4);
 8             System.Console.WriteLine(square.GetArea()); // 16
 9         }
10     }
11 }

 

Abstract methods(抽象方法) have the following features:

  • An abstract method is implicitly a virtual method.

  • Abstract method declarations are only permitted in abstract classes.

  • Because an abstract method declaration provides no actual implementation, there is no method body; the method declaration simply ends with a semicolon and there are no curly braces ({ }) following the signature.

  • It is an error to use the static or virtual modifiers in an abstract method declaration.

Abstract properties behave like abstract methods, except for the differences in declaration and invocation syntax.

  • It is an error to use the abstract modifier on a static property.

  • An abstract inherited property can be overridden in a derived class by including a property declaration that uses the override modifier.

①抽象方法是隐式的虚方法

②抽象方法只能在抽象类中进行声明。

③因为抽象方法声明却没有具体的实现,所以是没有方法体的“{ }”。以“;”结尾

④抽象方法声明时不能用static或virtual来修饰

⑤abstract不能用来修饰静态属性

⑥override用来修饰抽象属性派生类中的属性声明。

 


 

// virtual
1
using System; 2 namespace InterfaceDemo1 3 { 4 public class ConcreteRegularPolygon 5 { 6 public int NumberOfSides { get; set; } 7 public int SideLength { get; set; } 8 9 public ConcreteRegularPolygon(int sides, int length) 10 { 11 NumberOfSides = sides; 12 SideLength = length; 13 } 14 public double GetPerimeter() 15 { 16 return NumberOfSides * SideLength; 17 } 18 // 这里定义了一个virtual函数 19 public virtual double GetArea() 20 { 21 throw new NotImplementedException(); 22 } 23 } 24 }

 

 1 namespace InterfaceDemo1
 2 {
 3     public class Square : ConcreteRegularPolygon
 4     {
 5         public Square(int length) : base(4, length)
 6         {
 7 
 8         }
 9         // 在这里进行覆盖重写
10         public override double GetArea()
11         {
12             return SideLength * SideLength;
13         }
14     }
15 }

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第3张图片

 

abstract

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第4张图片

抽象方法必须在抽象类中。

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第5张图片

继承它就必须override抽象方法,假如不写会报错。

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第6张图片

 

interface

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第7张图片

同样也没有具体的实现。

【C#】学习笔记 abstract、virtual、interface使用的一些栗子_第8张图片

在调用接口的同时要实现方法。

 

暂时先写这么多。

你可能感兴趣的:(【C#】学习笔记 abstract、virtual、interface使用的一些栗子)