首先,我希望为我的问题选择一个好的标题。
根据“基本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)
{
}
}
答案 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。
“继承不是子类型
围绕面向对象语言最常见的混淆可能是子类型和继承之间的区别。子类型和继承之间最简单的区别是:子类型是接口上的关系,继承是实现的关系“
参考:软件工程 - 剑桥大学出版社 - 编程语言概念