C#泛型约束问题 [英] C# Generic Constrains Issue
问题描述
我收到以下错误。
类型Test.ICacheProvider'不能被用作类型参数 在泛型类型或方法TStorageProvider StorageManager.Test.IFileInfo。没有 从隐式引用转换 StorageManager.Test.ICacheProvider来 StorageManager.Test.IStorageProvider。的
这是程序设计的结构中什么错吗?
程序:
//缓存提供者类
公共接口ICacheProvider {}
公共类BaseCacheProvider:ICacheProvider {}
公共类DerivedCacheProvider:BaseCacheProvider {}
//存储类
公共接口IStorageProvider< TCacheProvider>其中,TCacheProvider:
ICacheProvider {}
公共接口BaseStorageProvider< TCacheProvider> :
IStorageProvider< TCacheProvider>其中,TCacheProvider:ICacheProvider {}
公共接口DerivedStorageProvider:BaseStorageProvider< ICacheProvider> {}
//用户类
公共接口IFileInfo< TStorageProvider>
其中,TStorageProvider:IStorageProvider< ICacheProvider> {}
公共类的FileInfo:IFileInfo< ICacheProvider> {}
该错误是在的FileInfo
类的定义。您可以设置模板参数 ICacheProvider
但是约束是模板参数必须是 IStorageProvider< ICacheProvider>
这可能会更好:
公共接口的FileInfo
:IFileInfo< IStorageProvider< ICacheProvider>>
即使你的名字不匹配: IFileInfo
需要的保存供应商,但你给它的缓存提供。 P>
I am receiving following error .
The type 'Test.ICacheProvider' cannot be used as type parameter 'TStorageProvider' in the generic type or method 'StorageManager.Test.IFileInfo'. There is no implicit reference conversion from 'StorageManager.Test.ICacheProvider' to 'StorageManager.Test.IStorageProvider'.
Is anything wrong within this program design structure ?
Program :
// Cache Provider Classes
public interface ICacheProvider { }
public class BaseCacheProvider : ICacheProvider { }
public class DerivedCacheProvider : BaseCacheProvider { }
// Storage Classes
public interface IStorageProvider<TCacheProvider> where TCacheProvider :
ICacheProvider { }
public interface BaseStorageProvider<TCacheProvider> :
IStorageProvider<TCacheProvider> where TCacheProvider : ICacheProvider { }
public interface DerivedStorageProvider : BaseStorageProvider<ICacheProvider> { }
// User Classes
public interface IFileInfo<TStorageProvider>
where TStorageProvider : IStorageProvider<ICacheProvider> { }
public class FileInfo : IFileInfo<ICacheProvider> { }
The error is in the definition of FileInfo
class. You set the template parameter to ICacheProvider
but the constraint is that the template argument must be IStorageProvider<ICacheProvider>
.
This would probably be better:
public interface FileInfo
: IFileInfo<IStorageProvider<ICacheProvider>>
Even your names do not match: IFileInfo
needs storage provider but you give it cache provider.
这篇关于C#泛型约束问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!