接口作为基于接口的编程服务:如何使用接口实现对客户端的服务提供者类

时间:2010-12-10 10:34:34

标签: c# programming-languages interface

首先,我希望为我的问题选择一个好的标题。

根据“基本C#”第7章试图描述界面概念 墙上插头是接口和所有设备 (客户端) 想要接收交流电源必须实现这个接口。这个 让我问一些简单的问题。

1 - 在我们的域中有一个名为Socket的实体,它是电源供应商和 换句话说, 服务提供商 ,关系是什么 这个服务提供商和服务(接口)之间,以及我们必须如何 实现套接字类。可以任何人提供套接字类的示例实现或给出一些建议 或示例源代码?谢谢大家。

2 - 如果我们将Interface视为合同或规范 我们发现有时它需要考虑我们的一些常量值 联系人(或规范)和其他人不应更改和修改这些项目 并且应该完全跟随它们。例如The PinsDistance和The PinsLength在我们的领域,  但我们知道它在C#中不可能使用 接口中的常量(在Java中可能)您如何处理此问题。

此处提供了此问题的示例实现。

interface I2PinsWallPlug
{
    void Plug();
    void Unplug();

    //***** Its Not Allowed To Use Const In an Interface In C# *****
       //const int Pinsdistance = 1;
       //const int PinsLength=5;
    //***** Its Not Allowed To Use Const In an Interface In C# *****
}

// A sample appliance is As a Client And Must Implemnt The Interface To Recieve Power 
class MyAppliance : I2PinsWallPlug
{
    public void Plug()
    {
       //...
    }

    public void Unplug()
    {
        //...
    }


}

//The Socket Class is Our Service Provider In Here and 
//I dont know My implementation Is Right Or Not ?????????????
class Socket
{
    public Socket( I2PinsWallPlug twoPinsWallPlug)
    { 
    }
}

3 个答案:

答案 0 :(得分:0)

客户端不仅获取服务的接口,还获取实体。在某些情况下,您的输入/输出参数是纯粹的基本.NET类型,但大多数情况下,这些都是复杂类型,需要提供给客户端。

如果您没有这样的实体,您可能会创建一个常量类并将其提供给客户 - ,这就是我几天前所做的。


常量类的示例

public static class SystemConstants
{

    public static readonly string Foo= "BAR";
    public static readonly int[] ValidTypeIdsForBaaz = new int[]{290,291};

}

更新 - 问题1

取决于我们所说的服务意味着什么。服务通常是合乎逻辑的,有时也是物理的。逻辑服务位于同一进程边界,同时由其客户端抽象,而物理服务位于同一台机器或另一台机器上的另一个进程中,作为Web服务,WCF服务或...

在不了解您的域模型的情况下 - 这项服务实际上做了什么 - 不可能提出抽象。提供有关Socket的一些信息,我们应该能够帮助抽象。

答案 1 :(得分:0)

如何使用抽象基类而不是接口

public abstract class I2PinsWallPlug
{
    protected const int Pinsdistance = 1;
    protected const int PinsLength = 5;

    public abstract void Plug();
    public abstract void Unplug();
}

public class MyAppliance : I2PinsWallPlug
{
    public override void Plug()
    {

    }

    public override void Unplug()
    {

    }
}

答案 2 :(得分:0)

C#中的接口概念更接近它应该是什么,因为接口与实现无关,不应包含任何数据或impl。

继承不是子类型

围绕面向对象语言最常见的混淆可能是子类型和继承之间的区别。子类型和继承之间最简单的区别是:子类型是接口上的关系,继承是实现的关系

参考:软件工程 - 剑桥大学出版社 - 编程语言概念