C#通用约束问题
我收到以下错误。C#通用约束问题
类型“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> { }
的错误是在FileInfo
类的定义。您将模板参数设置为ICacheProvider
,但约束条件是模板参数必须为IStorageProvider<ICacheProvider>
。
这可能会更好:
public interface FileInfo
: IFileInfo<IStorageProvider<ICacheProvider>>
即使你的名字不匹配:IFileInfo
需要存储供应商,而是你给它缓存提供商。
或者将ICacheProvider的声明更改为:'public interface ICacheProvider:IStorageProvider
@MatthewWatson:ICacheProvider可以有一个约束,它需要它自己是另一个接口的类型参数吗? – Carsten 2013-03-27 10:10:43
这没有意义。你只能约束事先不知道的东西。你可以“约束”一个接口来确保它继承另一个接口。 – 2013-03-27 10:14:58
你的约束missmatching:
// User Classes
public interface IFileInfo<TStorageProvider>
where TStorageProvider : IStorageProvider<ICacheProvider> { }
public class FileInfo : IFileInfo<ICacheProvider> { }
FileInfo
被声明为IFileInfo
与ICacheProvider
类型的通用说法。但IFileInfo
有约束,让我们只接受IStorageProvider
s。而ICacheProvider
不是IStorageProvider
。
您能告诉我们产生错误的行吗? – Carsten 2013-03-27 10:00:00
FileInfo类的声明行有错误。 – 2013-03-27 10:01:04
我错过了这个程序中缺少的东西吗? – 2013-03-27 10:02:38