我想使用 C# 8 默认接口实现来面对我的代码中的性能问题。
实际上,我有这个接口:
public interface IDataAdapter {}
public interface IDataAdapter<T> : IDataAdapter
{
void Insert(T value);
}
我实际上必须对所有进行反射IDataAdapter
,检查泛型类型并Insert
通过反射调用特定的 T 实例。我想做的是:
public interface IDataAdapter
{
void InsertValue(object value);
}
public interface IDataAdapter<T> : IDataAdapter
{
void Insert(T value);
public void InsertValue(object value) => Insert(value as T);
}
编译器说使用关键字 new 来屏蔽继承的方法。但是,我想要完成的唯一一件事是已经实现了一个非泛型方法,以使所有IDataAdapter<T>
实现只需要实现泛型版本。
这是我可以完成的事情还是仍然不可能?我已经知道使用抽象类是解决这个问题的一种方法,但我想让开发人员拥有一个实现许多 IDataAdapter 的类......
这是我当前的反射代码:
public IEnumerable<IDataAdapter> DataAdapters { get; }
public Repository(IEnumerable<IDataAdapter> dataAdapters)
{
DataAdapters = dataAdapters;
}
public async Task SaveAsync()
{
foreach (var item in aggregates)
{
foreach (var dataAdapter in DataAdapters)
{
if (dataAdapter.GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericArguments()[0] == item.GetType()))
{
dataAdapter.GetType().GetMethod("Insert", new[] { item.GetType() }).Invoke(dataAdapter, new[] { item });
}
}
}
}