C#接口作用的深入理解

article/2025/9/5 0:50:27

原文出处: 指尖流淌-吴学雷

1、C#接口的作用
C# 接口是一个让很多C#初学者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码。

没有真正认识到接口的作用的时候就觉得用接口是多此一举。

当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比盖茨还聪明的人,他们的C#能添这样的多足吗?!关于接口的作用,网上有一位就真的深入浅出给我们做了很好理解的分析。

我们定义一个接口:

public interface IBark
{void Bark();
}

再定义一个类,继承于IBark,并且必需实现其中的Bark()方法

public class Dog:IBark
{public Dog(){}public void Bark(){Consol.write("汪汪");}
}

然后,声明Dog的一个实例,并调用Bark()方法

Dog 旺财=new Dog();
旺财.Bark();

试想一样:
若是想调用Bark()方法,只需要在Dog()中声明这样的一个方法不就行了吗,干什么还要用接口呢?
因为接口中并没有Bark()具体实现.真的实现还是要在Dog()中.那么使用接口不是多此一举吗?

还有人是这样说的:从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束.还拿上面的例子来说.所有继承了IBark接口的类中必需实现Bark()方法.那么从用户(使用类的用户)的角度来说,如果他知道了某个类是继承于IBark接口,那么他就可以放心大胆的调用Bark()方法,而不用管Bark()方法具体是如何实现的.比如,我们另外写了一个类。

public class Cat:IBark
{public Cat(){}public void Bark(){Consol.write("喵喵");}
}

当用户用到Cat类或是Dog类的时候,知道他们继承于IBark,那么不用管类里的具体实现,而就可以直接调用Bark()方法,因为这两个类中肯定有关于Bark()方法的具体实现.

如果我们从设计的角度来看.一个项目中用若干个类需要去编写,由于这些类比较复杂,工作量比较大,这样每个类就需要占用一个工作人员进行编写.比如A程序员去定Dog类,B程序员去写Cat类.

这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于”叫”的方法.

这就要对他们进行一种约束,让他们都继承于IBark接口。

目的是方便统一管理.另一个是方便调用。

当然了,不使用接口一样可以达到目的。只不过这样的话,这种约束就不那么明显。

如果这样类还有Duck类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些。

2、C#中接口的深入浅出:

通过学习对C#中接口的作用有了更进一步的理解,拿出来跟大家分享一下,有说的不对的地方请大家指教。

假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示;Delphi程序员指的是用Delphi写程序的程序员,用clsDelphiProgramer这个类来表示。每个类都有一个WriteCode()方法。定义如下:

class clsVBProgramer
{public void WriteCode(){Console.WriteLine("用VB写程序的程序员");}
}class clsDelphiProgramer
{public void WriteCode(){Console.WriteLine("用Delphi写程序的程序员");}
}class Program
{public void WritePrograme(clsVBProgramer programer)//用VB写代码{programer.WriteCode();}public void WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码{programer.WriteCode();}static void Main(string[] args){Program proj = new Program();//如果需要用VB写代码clsVBProgramer programer1 = new clsVBProgramer();proj.WritePrograme(programer1);//如果需要用Delphi写代码clsDelphiProgramer programer2 = new clsDelphiProgramer();proj.WritePrograme(programer2);}
}

但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类clsCSharpProgramer,同时在此clsProject这个类中要再次重载WritePrograme(clsCSharpProgramer programer)方法。这下麻烦多了。如果还有C程序员,C++程序员,JAVA程序员呢。麻烦大了!

但是如果改用接口,就完全不一样了:
首先声明一个程序员接口:

interface IProgramer
{void WriteCode();
}class clsVBProgramer : IProgramer
{public void WriteCode(){Console.WriteLine("用VB写程序的程序员");}
}class clsDelphiProgramer : IProgramer
{public void WriteCode(){Console.WriteLine("用Delphi写程序的程序员");}
}class Program
{public void WritePrograme(IProgramer programer){programer.WriteCode();}static void Main(string[] args){Program prog = new Program();IProgramer programer;programer = new clsVBProgramer();prog.WritePrograme(programer);programer = new clsDelphiProgramer();prog.WritePrograme(programer);}
}

如果再有C#,C,C++,JAVA这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在main()中稍做修改就OK了。扩充性特别好!

另外我们如果把Program这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大。

这里写图片描述


http://chatgpt.dhexx.cn/article/4S5d8UKx.shtml

相关文章

java接口的作用和意义_Java接口的作用与意义

接口 1.接口的特点 首先看下面的这个抽象类代码: 抽象类代码中变量全为常量,方法全是抽象方法,这样的形式,我们可以将它们定义为接口类,书写方式如下: 接口的语法为: interface接口名{常量或方法 } 接口特点: 所有的属性都是公开静态常量所有的方法都是公开抽象方法没有…

java接口有什么用_接口有什么作用

接口的作用:1、接口可以使项目分离,所有层都面向接口开发,提高开发效率;2、接口使代码和代码之间的耦合度降低;3、接口可以多实现,多继承,并且一个类除了接口之外,还可以继承其它类。 接口的作用: 1、可以使项目分离,所有层都面向接口开发,提高开发效率; 2、接口使…

Comparable接口作用

今天在开发中无意看到Integer包装类内部实现了Comparable接口,因此探查一下该接口作用: 查看API解释: 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。…

java接口的作用是什么?接口的使用规范介绍

你知道java接口的作用有哪些吗?java接口的使用规范又是怎样的呢?有哪些是需要我们注意的?下面一起来详细的了解一下吧。 java接口的作用是什么? 一、接口的作用 首先,我们来谈论一下java接口的作用吧! 简单的来说&#xff0c…

接口的作用

今日内容:接口概述、接口定义、接口的用法、接口的继承、接口和抽象类的区别。 1.概述 接口定义了实现某种功能的规范,用来扩展类的功能。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法…

Pregel Master

转载于:https://www.cnblogs.com/fanweisheng/p/11269479.html

Pregel Combiner

转载于:https://www.cnblogs.com/fanweisheng/p/11269462.html

Pregel Aggregator

转载于:https://www.cnblogs.com/fanweisheng/p/11269466.html

Pregel Worker

转载于:https://www.cnblogs.com/fanweisheng/p/11269474.html

图计算-Pregel-Hama

一.图计算简介 1.1 图计算是专门针对图结构数据的处理. 许多大数据都是以大规模图或网络的形式呈现;许多非图结构的大数据,也常常被转换为图模型后进行分析;图结构很好地表达了数据之间的关联性;关联性计算是大数据计…

分布式图处理系统--Pregel

介绍分布式图处理系统–Pregel以及其开源实现–Giraph 图数据处理简介 图数据的应用 图数据 数据本身以图的形式呈现 社交网络传染病传播途径交通路网 某些非图结构的数据,也可以转换为图模型后进行处理 网页链接机器学习训练数据 关联性分析 图数据结构表达了…

graphx中Pregel函数详解

1、PregelAPI 图本质上是一种递归的数据结构,其顶点的属性值依赖于其邻接顶点,而其邻接顶点属性又依赖于其邻接顶点,许多重要的图算法通过迭代计算每个顶点的属性直到到达定点条件,这些迭代的图算法被抽象成一系列图并行操作。 2、…

Pregel与图迭代

graphx是如何实现Pregel迭代操作,我们应该如何使用该模型。先看下pregel接口源码: 接口中各参数的含义已在图中进行注释,所以此处不再赘述。简单介绍下源码中的参数说明: 剖析 pregel模型提供了消息收集方向、迭代次数、初始化消…

Google图算法引擎Pregel介绍

参考文献点击打开链接 【前言:有一种说法[1]是Google的程序里面80%用的是MapReduce,20%用的是Pregel。今天就来介绍一下这个Pregel。想要深入研究的同志们,可以参考最新的SIGMOD 2010 ppt[2]。】 简介 Pregel是一个用于分布式图计算的计算…

图计算: 使用 Spark Graphx Pregel API 处理分层数据

今天,分布式计算引擎是许多分析、批处理和流应用程序的支柱。Spark提供了许多开箱即用的高级功能(pivot、分析窗口函数等)来转换数据。有时需要处理分层数据或执行分层计算。许多数据库供应商提供诸如“递归 CTE(公用表达式&#…

pregel 与 spark graphX 的 pregel api

[原文](https://blog.csdn.net/u013468917/article/details/51199808)简介 在Hadoop兴起之后,google又发布了三篇研究论文,分别阐述了了Caffeine、Pregel、Dremel三种技术,这三种技术也被成为google的新“三驾马车”,其中的Pregel…

Pregel体系结构

在Pregel计算框架中,一个大型图会被划分成许多个分区,每个分区都包含了一部分顶点以及以其为起点的边 一个顶点应该被分配到哪个分区上,是由一个函数决定的,系统默认函数为hash(ID) mod N,其中,N为所有分区…

Spark GraphX 中的 pregel函数(转载)

文章目录 pregel函数源码 与 各个参数介绍:案例: 求顶点5 到 其他各顶点的 最短距离pregel原理分析 一篇关于 Spark GraphX 中 pregel函数 的笔记,通过一个小案例将pregel函数理解透彻。 pregel函数源码 与 各个参数介绍: def…

03 graphx 从 SSSP 来看 pregel

前言 呵呵 最近刚好有一些需要使用到 图的相关计算 然后 在其他文章中找到了一篇 关于最短路径的graphx计算的代码 spark graphx 最短路径及中间节点 呵呵 很久没有用这些东西了, 虽然只是简单的使用, 但是还是要 复习一下, 稍微理解一下 他的执行方式 pregel 相关论文 …

ArangoDB(四)Pregel

arango pregel.status()返回值 localhost:8529_system> pregel.status(1099521660554) {"state" : "done","gss" : 7,"totalRuntime" : 8.389497518539429,"aggregators" : {},"sendCount" : 392647,"re…