我收到以下错误。
“Test.ICacheProvider”类型不能用作类型参数 泛型类型或方法中的“TStorageProvider” 'StorageManager.Test.IFileInfo'。没有 隐式引用转换 'StorageManager.Test.ICacheProvider'来 'StorageManager.Test.IStorageProvider'。
这个程序设计结构有什么不对吗?
计划:
// 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> { }
答案 0 :(得分:7)
错误在FileInfo
类的定义中。您将模板参数设置为ICacheProvider
,但约束条件是模板参数必须为IStorageProvider<ICacheProvider>
。
这可能会更好:
public interface FileInfo
: IFileInfo<IStorageProvider<ICacheProvider>>
即使您的姓名不匹配:IFileInfo
需要存储提供商,但您提供缓存提供商。
答案 1 :(得分:1)
你的约束是不匹配的:
// User Classes
public interface IFileInfo<TStorageProvider>
where TStorageProvider : IStorageProvider<ICacheProvider> { }
public class FileInfo : IFileInfo<ICacheProvider> { }
FileInfo
被声明为IFileInfo
,其泛型参数类型为ICacheProvider
。但是IFileInfo
有一个约束,让它只接受IStorageProvider
s。 ICacheProvider
不是IStorageProvider
。