常见类型但方法不同

时间:2018-03-19 23:37:03

标签: c# oop interface abstract-class

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

我的问题是,我可以使用某种模式或某种抽象吗? 据我所知,不可能有一个共同的类型(接口),但不同的方法,而不进行强制转换。我正在使用C#

1 个答案:

答案 0 :(得分:1)

您可以使用泛型

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

如果您可以传递描述源地址的相同类型的参数,例如一个简单的字符串,您可以使用

声明接口
public interface IDataSource<TData>
{
    IEnumerable<TData> GetData(string address);
}

如果这是不可能的,因为不同的系统需要一组不同的参数,您可以使用第一个接口,而是将参数传递给不同实现的构造函数。由于构造函数永远不是接口的一部分,因此您始终可以这样做。

另一种可能性是为地址对象添加额外的泛型类型参数。

public interface IDataSource<TData, TAddress>
{
    IEnumerable<TData> GetData(TAddress address);
}

如果不同的数据源需要兼容,例如因为你想将它们插入List<T>,你也可以声明一个非通用的接口

public interface IDataSource
{
    IEnumerable GetData();
}

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

实现将显式实现非泛型接口,因此如果不通过IDataSource访问,则会自动隐藏其成员。该列表现在可以声明为List<IDataSource>