C#通用约束问题
我收到以下错误。
类型’Test.ICacheProvider’不能在generics类型或方法’StorageManager.Test.IFileInfo’中用作类型参数’TStorageProvider’。 没有从“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 where TCacheProvider : ICacheProvider { } public interface BaseStorageProvider : IStorageProvider where TCacheProvider : ICacheProvider { } public interface DerivedStorageProvider : BaseStorageProvider { } // User Classes public interface IFileInfo where TStorageProvider : IStorageProvider { } public class FileInfo : IFileInfo { }
错误在FileInfo
类的定义中。 您将模板参数设置为ICacheProvider
但约束是模板参数必须是IStorageProvider
。
这可能会更好:
public interface FileInfo : IFileInfo>
甚至你的名字都不匹配: IFileInfo
需要存储提供程序,但你给它缓存提供程序。
你的约束是不匹配的:
// User Classes public interface IFileInfo where TStorageProvider : IStorageProvider { } public class FileInfo : IFileInfo { }
FileInfo
声明为ICacheProvider
,其generics参数类型为ICacheProvider
。 但是, IFileInfo
的约束条件是它只接受IStorageProvider
。 而ICacheProvider
不是IStorageProvider
。