![](/img/trans.png)
[英]Using a interface as a type parameter of generic class with the limitation of “class” in C#
[英]Using generic type of model through interface in C#
我有兩個模型,例如:
public class ModelA {.....}
public class ModelB {.....}
現在,我有一個通用接口,例如:
public interface IRepository<TEntity> where TEntity : class
{
Task<int> MethodA(TEntity entity);
Task<int> MethodB(TEntity entity);
}
現在,有另一個接口繼承了之前的接口,如下所示。 但我不希望它只針對 ModelA。 我希望它是通用的 model。 因為 MethodA 將引用 ModelA 而 MethodB 將引用 ModelB。
public interface ITestRepository : IRepository<ModelA>
{
Task<bool> AdditionalMethodA(int id);
Task<bool> AdditionalMethodB(int id);
}
我想像這樣實現主要的 class 。 我想將 ModelA 傳遞給 MethodA,將 ModelB 傳遞給 MethodB。
public class MainRepository : ITestRepository
{
public Task<int> MethodA(ModelA modelA) {......}
public Task<int> MethodB(ModelB modelB) {......}
}
如何重構上述代碼,以便能夠擁有 model 的泛型類型? 任何幫助將不勝感激。 謝謝你。
我認為你想要的是每個接口一個方法,然后實現多個接口。
public class ModelA {}
public class ModelB {}
public interface IRepository<TEntity> where TEntity : class
{
Task<int> Method(TEntity entity);
}
public interface ITestRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
Task<bool> AdditionalMethod(int id);
}
public class MainRepository : ITestRepository<ModelA>, ITestRepository<ModelB>
{
public Task<int> Method(ModelA entity)
{
throw new NotImplementedException();
}
public Task<int> Method(ModelB entity)
{
throw new NotImplementedException();
}
public Task<bool> AdditionalMethodA(int id)
{
throw new NotImplementedException();
}
public Task<bool> AdditionalMethodB(int id)
{
throw new NotImplementedException();
}
Task<bool> ITestRepository<ModelA>.AdditionalMethod(int id)
{
return AdditionalMethodA(id);
}
Task<bool> ITestRepository<ModelB>.AdditionalMethod(int id)
{
return AdditionalMethodB(id);
}
}
class Program
{
static async Task Main(string[] args)
{
var mainTest = new MainRepository();
var a = new ModelA();
var b = new ModelB();
int xA = await mainTest.Method(a);
int xB = await mainTest.Method(b);
bool yA = await mainTest.AdditionalMethodA(0);
bool yB = await mainTest.AdditionalMethodB(0);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.