使用接口向转换器 class 添加方法
Adding methods to converter class with an interface
我写了一个相当简单的转换 class,它将 Foo
转换为 Bar
。
因为我想要其他 classes 的多个转换器,所以我设置了一个接口,有两种方法:
public interface IConverter<in TSource, out TDestination>
{
TDestination Convert(TSource sourceObject);
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}
我的 class 是这样实现的:
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
方法,它将另一个对象作为源并 returns 它作为 Bar
。将它添加到此 class 是否可以,因为它也 returns Bar
或者这是否更适合第二个 class 也实现了此接口?
我对 C# 和使用接口还很陌生,所以我不确定哪个更好。
(顺便说一句,这些有意义吗?有更好的选择吗?)
您应该添加另一个接口实现以实现预期结果:
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
}
我写了一个相当简单的转换 class,它将 Foo
转换为 Bar
。
因为我想要其他 classes 的多个转换器,所以我设置了一个接口,有两种方法:
public interface IConverter<in TSource, out TDestination>
{
TDestination Convert(TSource sourceObject);
IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects);
}
我的 class 是这样实现的:
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
方法,它将另一个对象作为源并 returns 它作为 Bar
。将它添加到此 class 是否可以,因为它也 returns Bar
或者这是否更适合第二个 class 也实现了此接口?
我对 C# 和使用接口还很陌生,所以我不确定哪个更好。
(顺便说一句,这些有意义吗?有更好的选择吗?)
您应该添加另一个接口实现以实现预期结果:
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
}