Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Oop_Interface_Abstract Class - Fatal编程技术网

C# 常见类型但不同方法

C# 常见类型但不同方法,c#,oop,interface,abstract-class,C#,Oop,Interface,Abstract Class,我有三种不同的系统需要与之通信。对于每个系统,我必须以不同的方式进行通信,并获得不同类型的数据。例如,对于两个系统,我必须使用REST API进行通信,对于第三个系统,我必须使用NET.TCP协议进行通信 我的问题是,是否有一种模式或某种抽象我可以使用? 据我所知,如果不进行强制转换,就不可能有一个通用的类型接口,而是不同的方法。我用的是C,你可以用泛型 public interface IDataSource<TData> { IEnumerable<TData>

我有三种不同的系统需要与之通信。对于每个系统,我必须以不同的方式进行通信,并获得不同类型的数据。例如,对于两个系统,我必须使用REST API进行通信,对于第三个系统,我必须使用NET.TCP协议进行通信

我的问题是,是否有一种模式或某种抽象我可以使用? 据我所知,如果不进行强制转换,就不可能有一个通用的类型接口,而是不同的方法。我用的是C,你可以用泛型

public interface IDataSource<TData>
{
    IEnumerable<TData> GetData();
}
如果可以传递描述源地址的相同类型的参数,例如简单字符串,则可以使用

public interface IDataSource<TData>
{
    IEnumerable<TData> GetData(string address);
}
如果由于不同的系统需要不同的参数集而无法实现,则可以使用第一个接口,将参数传递给不同实现的构造函数。因为构造函数从来都不是接口的一部分,所以您总是可以这样做的

还有一种可能是为address对象添加额外的泛型类型参数

public interface IDataSource<TData, TAddress>
{
    IEnumerable<TData> GetData(TAddress address);
}
如果不同的数据源需要兼容,例如,因为您想将它们插入列表,那么您也可以声明一个非通用接口

public interface IDataSource
{
    IEnumerable GetData();
}

public interface IDataSource<TData> : IDataSource
{
    IEnumerable<TData> GetData();
}

一个实现将显式地实现非泛型接口,从而自动隐藏其成员(如果不是通过IDataSource访问的话)。列表现在可以声明为列表。

代理或适配器模式可能就可以了。您可以使用接口抽象出任何内容。不确定你所说的不可能,这取决于你想如何从这些系统中获取数据。您将同时从其中一个系统获取数据,或者同时从所有三个系统获取数据?您可以创建一个接口和三个具体类。。每个系统一个,并使用策略模式在运行时决定从何处获取数据。