使用接口向转换器类添加方法

时间:2017-01-13 11:57:59

标签: c# interface converter

我编写了一个相当简单的转换类,它将import { Injectable } from '@angular/core'; @Injectable() export class StorageService { public setItem(key: string, data: any) { sessionStorage.setItem(key, JSON.stringify(data)); } public getItem(key: string) { if (!!sessionStorage.getItem(key)) { return sessionStorage.getItem(JSON.parse(key)); } else { return false; } } public clear() { sessionStorage.clear(); return true; } public removeItem(key: string) { sessionStorage.removeItem(key); return true; } } 转换为Foo

因为我想为其他类使用多个转换器,所以我已经设置了一个包含两种方法的接口:

Bar

我的班级就是这样实现的:

public interface IConverter<in TSource, out TDestination>
{
    TDestination Convert(TSource sourceObject);
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

哪一切都很精彩。我想添加另一个public class ObjectConverter : IConverter<Foo, Bar> { public Bar Convert(Foo sourceObject) { return new Bar { // Mapping attributes... }; } public IEnumerable<Bar> ConvertMany(IEnumerable<Foo> sourceObjects) { return sourceObjects.Select(obj => new Bar { // Mapping attributes... }); } } 方法,该方法将另一个对象作为源并将其作为ConvertMany返回。将它添加到此类是否可以,因为它也返回Bar或者这是否更适合同样实现此接口的第二个类?

我对C#很新,并且使用接口,所以我不确定什么会更好。

(侧面说明,这有什么意义吗?还有更好的选择吗?)

1 个答案:

答案 0 :(得分:2)

您应该添加界面的另一个实现来实现预期的结果:

public interface IConvertFromMany<TSource, TDestination>
{
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}

public interface IConverter<TSource, TDestination> : IConvertFromMany<TSource, TDestination>
{
    TDestination Convert(TSource sourceObject);

}

使用它像:

public class ObjectConverter : IConverter<Foo, Bar>, IConvertFromMany<AnotherSourceObject, Bar>
{
   //....your implementations here        
}