C#通用约束问题

Raj*_*tel 3 .net c#

我收到以下错误.

类型'Test.ICacheProvider'不能在泛型类型或方法'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<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> { }
Run Code Online (Sandbox Code Playgroud)

Ton*_*ina 7

错误在于FileInfo类的定义.您将模板参数设置为,ICacheProvider但约束是模板参数必须是IStorageProvider<ICacheProvider>.

这可能会更好:

public interface FileInfo
          : IFileInfo<IStorageProvider<ICacheProvider>>
Run Code Online (Sandbox Code Playgroud)

甚至你的名字都不匹配:IFileInfo需要存储提供商,但你给它缓存提供商.