通过其接口访问对象

盎格鲁人

到底是什么意思 我正在阅读设计模式书。它说对象只能通过它们的接口访问,而我无法理解,有人可以给我举个例子(如果用C#表示,将不胜感激)

通过使用它,我们真正实现了什么?

谢谢

维克拉姆

这真的取决于。如果变量的类型为“ interface”,则在这种情况下,只能通过接口类型访问对象。

让我们考虑一个示例-假设我有一个如下定义的接口-

interface IMyInterface
{
   string B();
}

并且如果我使用类“ MyClass”实现此接口,如下所示-

public class MyClass:IMyInterface
   {
      public string B()
      { 
           return "In Class";
      }
   }

   public class MyAnotherClass:IMyInterface
       {
          public string B()
          { 
               return "In Another Class";
          }
       }

然后使用如下所示的接口创建该类的实例

   IMyInterface myinst = new MyClass();

那么在上述情况下,我只能使用包含对MyClass类型的引用的变量myinst访问方法B()

进一步讲,假设我有一个采用IMyInterface类型参数的方法,如下所示-

    public class UseOfInterface{
    public void InterfaceUse(IMyInterface myPara)
    {
      myPara.B();
    }
}

我将这个方法称为如下所示-

        IMyInterface myInst = new MyClass();
        IMyInterface myAnotherInst = new MyAnotherClass();

        UseOfInterface interfaceUse = new UseOfInterface();
        interfaceUse.InterfaceUse(myInst); // returns "In Class"
        interfaceUse.InterfaceUse(myAnotherInst); // returns "In Another Class"

然后,如上所示,在运行时决定使用Interface变量调用哪种方法。

但是,如果我创建了一个MyClass类型的变量,该变量本身将包含MyClass类型的引用,如下所示-

   MyClass myinst = new MyClass();

然后可以使用MyClass实例访问方法B()。因此,这取决于您要处理的场景类型。

编辑:为什么使用接口?

使用接口的主要原因是,除了C#中的多继承支持之外,它还为正在为其实现的类提供合同。让我们看一个示例,其中提供合同可能会有所帮助。

假设您要公开公开的程序集中有一个类“ Car”,则该类的定义如下所示

namespace CarNameSpace
{
   public class Car()
   {
      public void Drive(IDriver driver)
      {
         if(driver.Age > 18)
         {
            driver.Drive();
         }
      }
   }
}

如上所示,实现IDriver接口的任何人都可以驾驶汽车,如下所述,

interface IDriver
{
   string Age{get; set;}
   string Name {get set;}
   string Drive()
}

反过来,我要开车,我将把IDriver接口暴露给外界,因此实现我的接口的任何人都可以调用Car的Drive方法,无论他如何驾驶汽车,如下所示

public class PerfectDriver:IDriver
{
   public PerfectDriver()
   {
     Name = "Vikram";
     Age = 30;
   }
   public int Age{get; set;}
   public string Name {get; set;}
   public string Drive()
   {
      return "Drive's perfectly";
   }
}

汽车类可以用作如下所示

  PerfectDriver perf = new PerfectDriver
  Car myCar = Car();  
  myCar.Driver(perf);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在COM接口中访问子对象

来自分类Dev

如何使用存储库接口在Spring Data中通过其嵌套对象的objectId查找集合?

来自分类Dev

Lambda可以访问其目标功能接口的成员吗?

来自分类Dev

如何使用即兴接口访问代理对象

来自分类Dev

如何通过接口传递对象ArrayList?

来自分类Dev

通过其索引访问行号

来自分类Dev

通过Java接口远程访问ArangoDB

来自分类Dev

如何定义一个对象,其项目可以通过Typescript中的可变内容进行访问?

来自分类Dev

如何从通过TClass创建的对象获取接口?

来自分类Dev

如果我只能访问其接口且不可序列化,是否可以克隆该对象?

来自分类Dev

如何定义一个对象,其项目可以通过Typescript中的可变内容进行访问?

来自分类Dev

Typescript对象类成员是通过接口定义的

来自分类Dev

通过对象的Java接口方法调用

来自分类Dev

通过类接口访问类的属性

来自分类Dev

如何通过其ID访问控件

来自分类Dev

Javascript通过其属性访问主对象

来自分类Dev

除了实现SessionAware接口之外,还可以通过多种方法在struts2中获取会话访问对象

来自分类Dev

通过其OnClickListener访问Button的LinearLayout

来自分类Dev

无法通过其ID访问轮播

来自分类Dev

如何使用即兴接口访问代理对象

来自分类Dev

通过Java接口远程访问ArangoDB

来自分类Dev

如何通过接口获取对象的地址?

来自分类Dev

通过引用访问对象

来自分类Dev

Javascript 对象无法访问其属性

来自分类Dev

通过接口访问不同的对象属性?C#

来自分类Dev

如何访问数组(json)中对象的位置并通过php更改其值

来自分类Dev

通过接口处理空对象引用

来自分类Dev

通过其接口访问可变参数模板结构

来自分类Dev

如何通过其键之一的值访问嵌套在数组中的对象?

Related 相关文章

  1. 1

    在COM接口中访问子对象

  2. 2

    如何使用存储库接口在Spring Data中通过其嵌套对象的objectId查找集合?

  3. 3

    Lambda可以访问其目标功能接口的成员吗?

  4. 4

    如何使用即兴接口访问代理对象

  5. 5

    如何通过接口传递对象ArrayList?

  6. 6

    通过其索引访问行号

  7. 7

    通过Java接口远程访问ArangoDB

  8. 8

    如何定义一个对象,其项目可以通过Typescript中的可变内容进行访问?

  9. 9

    如何从通过TClass创建的对象获取接口?

  10. 10

    如果我只能访问其接口且不可序列化,是否可以克隆该对象?

  11. 11

    如何定义一个对象,其项目可以通过Typescript中的可变内容进行访问?

  12. 12

    Typescript对象类成员是通过接口定义的

  13. 13

    通过对象的Java接口方法调用

  14. 14

    通过类接口访问类的属性

  15. 15

    如何通过其ID访问控件

  16. 16

    Javascript通过其属性访问主对象

  17. 17

    除了实现SessionAware接口之外,还可以通过多种方法在struts2中获取会话访问对象

  18. 18

    通过其OnClickListener访问Button的LinearLayout

  19. 19

    无法通过其ID访问轮播

  20. 20

    如何使用即兴接口访问代理对象

  21. 21

    通过Java接口远程访问ArangoDB

  22. 22

    如何通过接口获取对象的地址?

  23. 23

    通过引用访问对象

  24. 24

    Javascript 对象无法访问其属性

  25. 25

    通过接口访问不同的对象属性?C#

  26. 26

    如何访问数组(json)中对象的位置并通过php更改其值

  27. 27

    通过接口处理空对象引用

  28. 28

    通过其接口访问可变参数模板结构

  29. 29

    如何通过其键之一的值访问嵌套在数组中的对象?

热门标签

归档