C#接口实现:做正确的事情

C#接口实现:做正确的事情,c#,.net,inheritance,interface,C#,.net,Inheritance,Interface,我有一个假想的经销商,他可以提供一些服务;所有服务都是相同的:它们威胁一些IRequest数据,加上一些IExtraData,并提供IResponse 请阅读此代码(使用C#2.0): 公共接口IResellerService 哪里:IRequest Tinetrada在哪里 在哪里兜售:我回应 TOutExtra在哪里 { #区域属性 字符串代码 { 得到; 设置 } //这里还有一些简单的属性。。。 #端区 //有一些方法。。。 } //需要一组iResellerService;使用ILi

我有一个假想的经销商,他可以提供一些服务;所有服务都是相同的:它们威胁一些IRequest数据,加上一些IExtraData,并提供IResponse

请阅读此代码(使用C#2.0):

公共接口IResellerService
哪里:IRequest
Tinetrada在哪里
在哪里兜售:我回应
TOutExtra在哪里
{
#区域属性
字符串代码
{
得到;
设置
} 
//这里还有一些简单的属性。。。
#端区
//有一些方法。。。
}
//需要一组iResellerService;使用IList只是为了添加工具
公共接口IResellerServices:IList
{
IResellerService Get(字符串代码);
无效更新(IResellerService转销商);
作废删除(字符串代码);
无效禁用(字符串代码);
}
公共类可用性服务:IResellerService
{
//这里介绍了接口的实现;
/* 
注意IResellerService声明
可用性文档请求:IRequest
可用性输入外部数据:IExtraData
可用性文档响应:i响应
可用性输出外部数据:IExtraData
*/
}
[可序列化]
公共类转售商:IReseller
{
#区域属性
公共字符串代码
{
得到;
设置
}
[XmlArray(“服务”)]
[XmlArrayItem(“服务”)]
公共IResellerServices服务
{get;set;}
//这里还有一些简单的属性。。。
#端区
//有一些方法。。。
}
//只是让我解释一下。。。
void Main()
{
经销商res=新经销商;
//在此处填写经销商属性。。。
//...
AvailabilityService=新的AvailabilityService();
//在此处填写服务属性。。。
//...
//错误!

资源添加(服务)//我认为您在这里遇到的问题是,尽管以这种方式将接口组合在一起很好,但如果您有一个接口,您确实需要一些东西来使用该接口。您还没有做到这一点,您已经通过实现该接口专门化了一个类型,但是哪些类型将使用该接口作为input直接?以下是一个示例:

public interface IService<TModel>
{
  TModel Get(string id);
}

public class MyService : IService<MyModel>
{
  public MyModel Get(string id)
  {
    // Work
  }
}

var service = new MyService();
var model = service.Get("something");
现在我有了一个类,它可以使用我的接口,并允许我将实现与代码分离:

var factory = new ModelFactory<MyModel>(new MyService());
var model = factory.Get("something");
var-factory=newmodelfactory(newmyservice());
var模型=工厂获取(“某物”);

通常,您会使用IoC/DI注入依赖项,但我希望这是一个明确的示例。

上述代码在C#2.0中不起作用-它使用的是泛型差异,这仅在C#4.0中引入。您应该阅读.net 4.0中引入的泛型接口中的差异概念。Show IReseller.Add或Reller.Add declarationsCheck谢谢你们,你们说得对。回到C#2.0让我有点困惑…:-斯马修斯,你们的工厂解决方案很好。午饭后(在意大利,现在是中午半):)我会试试。谢谢!
public class ModelFactory<TModel>
{
  IService<TModel> _service;

  public ModelFactory(IService<TModel> service)
  {
    _service = service;
  }

  public TModel Get(string code)
  {
    return _service.Get(code);
  }

}
var factory = new ModelFactory<MyModel>(new MyService());
var model = factory.Get("something");