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