3

我收到以下错误。

类型“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> { }
4

2 回答 2

7

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

这可能会更好:

public interface FileInfo
          : IFileInfo<IStorageProvider<ICacheProvider>>

甚至你的名字也不匹配:IFileInfo需要存储提供者,但你给它缓存提供者。

于 2013-03-27T10:01:48.213 回答
1

您的约束不匹配:

// User Classes
public interface IFileInfo<TStorageProvider> 
    where TStorageProvider : IStorageProvider<ICacheProvider> { }

public class FileInfo : IFileInfo<ICacheProvider> { }

FileInfo被声明为IFileInfo带有类型的泛型参数ICacheProvider。但是IFileInfo有一个约束,让它只接受IStorageProviders。而且ICacheProvider不是IStorageProvider.

于 2013-03-27T10:07:17.863 回答