C#通用约束问题

时间:2013-03-27 09:57:49

标签: c# .net

我收到以下错误。

  

“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> { }

2 个答案:

答案 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