Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图书馆通过接口输入数据_C#_Interface - Fatal编程技术网

C# 图书馆通过接口输入数据

C# 图书馆通过接口输入数据,c#,interface,C#,Interface,我们的C#解决方案中出现了一种模式问题 最初的想法: 我们有一套功能(主要是计算),这是几个项目所需要的。我们设想我们的解决方案是模块化的——每个功能都实现为一个类库,在其他项目中可以作为.dll引用 第一期: 发生的事情是,库有类,这些类指定了进行数学运算所需的输入数据。由于单个库可以在许多项目中使用,我们最终为每个项目编码映射,将项目域对象移植到输入数据类。这很乏味,因为我们大部分时间都在进行一对一的转换——这些类基本上是相同的 创意: 我们认为使用接口而不是类来指定输入数据可以解决问题。这

我们的C#解决方案中出现了一种模式问题

最初的想法: 我们有一套功能(主要是计算),这是几个项目所需要的。我们设想我们的解决方案是模块化的——每个功能都实现为一个类库,在其他项目中可以作为.dll引用

第一期: 发生的事情是,库有类,这些类指定了进行数学运算所需的输入数据。由于单个库可以在许多项目中使用,我们最终为每个项目编码映射,将项目域对象移植到输入数据类。这很乏味,因为我们大部分时间都在进行一对一的转换——这些类基本上是相同的

创意: 我们认为使用接口而不是类来指定输入数据可以解决问题。这样,我们就可以简单地用接口标记我们的域类,而不必再进行映射了

当前问题: 我们现在有一个完整的混乱与接口定义和使用这些接口的计算方法。例如

public interface ILevel2Child
{
}

public interface ILevel1Child<TLevel2Child> 
    where TLevel2Child : ILevel2Child
{
    List<TLevel2Child> Children { get; }
}

public interface IParent<TLevel1Child, TLevel2Child>
    where TLevel1Child: ILevel1Child<ILevel2Child>
    where TLevel2Child: ILevel2Child
{
    List<TLevel1Child> Children { get; }
}
但这阻止了我们这样做

public class Level2Child : ILevel2Child
{
}

public class Level1Child : ILevel1Child
{
    List<Level2Child> Children { get; }
}

public class Parent : IParent
{
    List<Level1Child> Children { get; }
}
public class Level2Child:ILevel2Child
{
}
公共级别1儿童:I级别1儿童
{
列出子项{get;}
}
公共类父级:IParent
{
列出子项{get;}
}

这是不可接受的。

为什么要将
列表
属性类型更改为
列表
?在任何情况下,如果您必须这样做没有问题,那么您可以访问/拥有这两个类。我们需要具体的类,因为它们实现了多个接口。所以你建议我们复制这些属性,比如:
公共类父类:IParent{List Children{get;}List IParent.Children{get{return Children;}}}}
public class Level2Child : ILevel2Child
{
}

public class Level1Child : ILevel1Child
{
    List<Level2Child> Children { get; }
}

public class Parent : IParent
{
    List<Level1Child> Children { get; }
}