文档章节

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

o
 osc_g8254g7s
发布于 2019/08/19 17:37
字数 692
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

上🌰

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.

①抽象类无法被实例化

  

 

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

③抽象类无法用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 }

 

abstract

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

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

 

interface

同样也没有具体的实现。

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

 

暂时先写这么多。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

SnailSVN Pro for mac(SVN客户端) v1.9.9

macw为您带来SnailSVN Pro for mac ,SnailSVN Mac版是一款类似于 TortoiseSVN 的 Apache Subversion(SVN)客户端,与 Finder 紧密集成。SnailSVN Mac版允许你从 Finder 的上下文菜单中快速...

单手绕月
26分钟前
13
0
python网络编程(进程与多线程)

multiprocessing模块   由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。   multiprocessing包是Pytho...

osc_ky74f26k
26分钟前
5
0
CentOS7 redis5.0高可用部署

概述 Redis Sentinel为Redis提供高可用性。Redis Sentinel是一个分布式系统,Sentinel本身设计为在有多个Sentinel进程协同合作的配置中运行。具有多个Sentinel进程进行协作的优点如下: 1、当...

紅顏為君笑
26分钟前
12
0
Ocelot简易教程(四)之请求聚合以及服务发现

上篇文章给大家讲解了Ocelot的一些特性并对路由进行了详细的介绍,今天呢就大家一起来学习下Ocelot的请求聚合以及服务发现功能。希望能对大家有所帮助。 作者:依乐祝 原文地址:https://www...

osc_zo0djpuu
27分钟前
14
0
leetcode63(不同路径 II)--Java语言实现

求: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在...

拓拔北海
27分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部