C# 关于概念的示例代码";“作为合同的接口”;它描述了术语调用者和被调用者的状态和角色?

C# 关于概念的示例代码";“作为合同的接口”;它描述了术语调用者和被调用者的状态和角色?,c#,interface,C#,Interface,在许多书籍或文章中,你可能会看到这样一个关于接口的定义:接口是消费者(调用者)和提供者(被调用者)之间的“合同”或协议。但不幸的是,没有明确的示例来描述什么是调用方类,或者什么是被调用方类,以及如何通过接口相互通信 从这个角度来看,我对术语调用者(使用者)和被调用者(提供者)感到困惑,我只知道我们定义了一个接口,而一个类实现了该接口。实现者类被认为是调用者吗?如果是,那么被调用者呢?被调用者是如何使用接口的?任何人都可以清楚地描述这个术语并给出一个明确的例子 任何帮助都将不胜感激。调用方将是调用

在许多书籍或文章中,你可能会看到这样一个关于接口的定义:接口是消费者(调用者)和提供者(被调用者)之间的“合同”或协议。但不幸的是,没有明确的示例来描述什么是调用方类,或者什么是被调用方类,以及如何通过接口相互通信

从这个角度来看,我对术语调用者(使用者)和被调用者(提供者)感到困惑,我只知道我们定义了一个接口,而一个类实现了该接口。实现者类被认为是调用者吗?如果是,那么被调用者呢?被调用者是如何使用接口的?任何人都可以清楚地描述这个术语并给出一个明确的例子


任何帮助都将不胜感激。

调用方将是调用实现接口的代码。被调用方将是实现接口的对象。尽管人们很少使用这个术语

以下是(受java启发的)伪代码中的一个示例:

interface readable {
    function read();
}

//callee
class book implements readable {
    function read() {
        print this.text;
    }
    //other implementation code goes here
}

//caller
define readable b = new book();
b.read();

调用方是调用实现接口的东西的代码。被调用方将是实现接口的对象。尽管人们很少使用这个术语

以下是(受java启发的)伪代码中的一个示例:

interface readable {
    function read();
}

//callee
class book implements readable {
    function read() {
        print this.text;
    }
    //other implementation code goes here
}

//caller
define readable b = new book();
b.read();

实现接口的是被调用方,因为他提供接口的实现。消费者是使用被调用者对象的人,所以他们称之为调用者

编辑

pulbic interface IPlugin
{
    double Calculate(double d1, double d2);
}

public class WebConnectPlugin: IPlugin
{
   public double Calculate(double d1, double d2){ // some code}
}

public class DBConnectPlugin: IPlugin
{
   public double Calculate(double d1, double d2){ // some code}
}
在代码的某个地方:

public class CallerIDE
{
   IPlugin plugin= null; 


   public void DoSomething()
   {
      contractor = GetPlugin();
      double value = contractor.Calculate(10.3456, -3.546456);
   }

   private IPlugin GetPlugin()
   {
      return new WebConnectPlugin();

      return new DBConnectPlugin(); //based on some logic
   }

}

实现接口的是被调用方,因为他提供接口的实现。消费者是使用被调用者对象的人,所以他们称之为调用者

编辑

pulbic interface IPlugin
{
    double Calculate(double d1, double d2);
}

public class WebConnectPlugin: IPlugin
{
   public double Calculate(double d1, double d2){ // some code}
}

public class DBConnectPlugin: IPlugin
{
   public double Calculate(double d1, double d2){ // some code}
}
在代码的某个地方:

public class CallerIDE
{
   IPlugin plugin= null; 


   public void DoSomething()
   {
      contractor = GetPlugin();
      double value = contractor.Calculate(10.3456, -3.546456);
   }

   private IPlugin GetPlugin()
   {
      return new WebConnectPlugin();

      return new DBConnectPlugin(); //based on some logic
   }

}

学校是许多人来学习的地方。每个人都有不同的学习方式

学校有一条规则:任何人进入学校都必须是可以学习的

学校确信,如果一个人不能学习,那么它就不能教他们,因此
他们不能学习

每个人都实现了ILEARNABLE接口

public  class INDIVIDUAL : ILEARNABLE //this is provider class as it provides implementation of interface.
{

    LEARN()
     {
        //WAY OF LEARNING IS MENTIONED HERE...
     }
}
学校通过一种叫Teach()的方法来教他们


在这里,学校不必担心谁是个人,只要他们实现了ilearnable界面。

学校是许多个人来学习的地方。每个人都有不同的学习方式

学校有一条规则:任何人进入学校都必须是可以学习的

学校确信,如果一个人不能学习,那么它就不能教他们,因此
他们不能学习

每个人都实现了ILEARNABLE接口

public  class INDIVIDUAL : ILEARNABLE //this is provider class as it provides implementation of interface.
{

    LEARN()
     {
        //WAY OF LEARNING IS MENTIONED HERE...
     }
}
学校通过一种叫Teach()的方法来教他们


在这里,学校不必担心谁是个人,只要他们已经实现了ilearnable接口。

移动到移动到我明白了这个想法,但请告诉我为什么你没有在caller类中将接口用作方法(Dosomething)的参数,我认为将接口用作私有成员或参数会使调用方类和被调用方类之间的关系类型有所不同,有人能解释一下吗?我不会让它们有所不同。概念是一样的。不,我不同意你的观点,我认为当你把一个o类的实例用在另一个类中时,这两个类之间存在组合关系,但是当你把一个类的实例传递给另一个类的方法时,这是一种依赖关系。@siamak:我们这里讨论的不是关系,而是调用方/calee模式。如果我们谈论关系,我会同意你。@siamak:啊,这个话题太大了,没有“银弹”(一个解决方案,所有东西都必须适应具体的项目),但你可以开始看一看:1)2)3)我知道了,但请告诉我为什么你不使用接口作为方法(剂量测量)的参数在调用方类中,我认为将接口用作私有成员或参数会使调用方类和被调用方类之间的关系类型有所不同,有人能解释一下吗?我不会让它们有所不同。概念是一样的。不,我不同意你的观点,我认为当你把一个o类的实例用在另一个类中时,这两个类之间存在组合关系,但是当你把一个类的实例传递给另一个类的方法时,这是一种依赖关系。@siamak:我们这里讨论的不是关系,而是调用方/calee模式。如果我们谈论关系,我会同意你。@siamak:啊,这个话题太大了,没有“银弹”(一个解决方案,一切都必须适应具体的项目),但你可以开始看看:1)2)3)非常好的例子,但请明确,何时需要将接口用作customer类中方法的参数?作为customer类中的私有成员,您什么时候需要使用它?您知道在不同的位置使用接口会使provider类和customer类之间的关系不同。thanks@siamak:1>作为私有成员的接口:::私有成员用于存储对象的状态。e、 比如说,你们学校的班级做了很多事情,而不仅仅是教学,例如,指挥考试()。因此,宣布Priavte成员为所有学习者名单;当你教他们的时候,把他们添加到列表中,比如:AllLearnedOne.add(Individual1);所有学习过的单词。添加(个人2)等。。然后,在名为ConductExam()的方法中,只需使用此私有成员,即可找到您所了解的所有个人。很难选择最佳答案,无论如何,感谢您的帮助:)好。。别担心。作为