我是这个站点的新用户,我有一个存储库模式,如果您检查下面的代码,则在这里定义了返回类型和参数T,将通过调用方法来实现,因此在运行时它将被{{1}替换},参数将被更改为字符串,int或bool,但是下面将无法编译,但是我需要使其工作,请帮助,替代方法也将工作。
SomeClass
冗余方法:
public interface IBaseRepository
{
Task<T> Add<T>(T value,string typeName);
}
public class Test: IBaseRepository
{
public Task<SomeClass> Add<SomeClass>(string value, string typeName)
{
throw new NotImplementedException();
}
public Task<SomeClass> Add<SomeClass>(int value, string typeName)
{
throw new NotImplementedException();
}
public Task<SomeClass> Add<SomeClass>(bool value, string typeName)
{
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
我确定未实现接口会给您带来错误。
根据您的界面 任务Add(T值,字符串类型名称);
如果您正确看待的话,那么通用类型T必须返回类型任务,并且应该以与添加函数相同的方式输入。
现在来看一下实现
您的方法都不满足接口。例如
公共任务添加(字符串值,字符串typeName)
这里T是SomeClass,所以方法的第一个参数必须为SomeType类型。
更新1:我会做这样的事情。
public interface IBaseRepository<T,U,V>
{
Task<V> AddData(T namespaceName, U typeName);
}
public class SomeClass
{
}
public class Test : IBaseRepository<string, string, SomeClass> , IBaseRepository<int,string,SomeClass>
{
public Task<SomeClass> AddData(int namespaceName, string typeName)
{
throw new NotImplementedException();
}
public Task<SomeClass> AddData(string namespaceName, string typeName)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:0)
public interface IBaseRepository<E>
{
Task<T> Add<T>(E value,string typeName);
}
public class Test: IBaseRepository<SomeDefinedClass>
{
public Task<SomeClass> Add<SomeClass>(SomeDefinedClass value, string typeName)
{
throw new NotImplementedException();
}
}
这里是解决问题的方法,但是在如何将其用于存储库模式方面仍然存在问题。
答案 2 :(得分:0)
这看起来更像您的追求吗?
public interface IBaseRepository<R>
{
Task<T> Add<T>(R value, string typeName);
}
public class Test<R> : IBaseRepository<R>
{
public Task<T> Add<T>(R value, string typeName)
{
throw new NotImplementedException();
}
}
您只需实施一次该方法。您只需为要运行的每个Test<R>
创建一个新的R
。