使用C#Generics的界面设计

the*_*rrs 2 c# generics interface

我目前正在设计一个类库,它将为C#中的Web应用程序图形呈现引擎提供数据.我目前正在定义这个库的接口.

我有一个IGraphData接口,我想使用访问缓存的服务进行缓存,这称为IGraphDataCacheService,并设置和获取方法来向缓存添加和检索IGraphData对象.缓存服务将是一个单身人士.

我对实现它的正确方法感到困惑,因此只有一个缓存服务可以获取和设置通用IgraphData对象.

我想出了这个:

interface IGraphDataCacheService {

IGraphData<object> Get(string identifier);
void Set(IGraphData<object> graphData);}
Run Code Online (Sandbox Code Playgroud)

或这个:

T Get<T, P>(string identifier) where T : IGraphData<P>;
void Set<T,P>(T graphData) where T : IGraphData<P>;
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供任何建议帮助吗?

谢谢

Ana*_*tts 8

你为什么不把接口变成通用的呢?

interface ICacheService<T> {
    T Get(string identifier);
    void Set(T graphData);
}
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你可以键入约束T为IGraphData类型,或者你可以把它写成:

interface IGraphDataCacheService<T> {
    IGraphData<T> Get(string identifier);
    void Set(IGraphData<T> graphData);
}
Run Code Online (Sandbox Code Playgroud)