C#泛型约束问题 [英] C# Generic Constrains Issue

查看:177
本文介绍了C#泛型约束问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到以下错误。

  

类型Test.ICacheProvider'不能被用作类型参数   在泛型类型或方法TStorageProvider   StorageManager.Test.IFileInfo。没有   从隐式引用转换   StorageManager.Test.ICacheProvider来   StorageManager.Test.IStorageProvider。

这是程序设计的结构中什么错吗?

程序:

  //缓存提供者类

公共接口ICacheProvider {}

公共类BaseCacheProvider:ICacheProvider {}

公共类DerivedCacheProvider:BaseCacheProvider {}

//存储类
公共接口IStorageProvider< TCacheProvider>其中,TCacheProvider:
    ICacheProvider {}

公共接口BaseStorageProvider< TCacheProvider> :
    IStorageProvider< TCacheProvider>其中,TCacheProvider:ICacheProvider {}

公共接口DerivedStorageProvider:BaseStorageProvider< ICacheProvider> {}

//用户类
公共接口IFileInfo< TStorageProvider>
    其中,TStorageProvider:IStorageProvider< ICacheProvider> {}

公共类的FileInfo:IFileInfo< ICacheProvider> {}
 

解决方案

该错误是在的FileInfo 类的定义。您可以设置模板参数 ICacheProvider 但是约束是模板参数必须是 IStorageProvider< ICacheProvider>

这可能会更好:

 公共接口的FileInfo
          :IFileInfo< IStorageProvider< ICacheProvider>>
 

即使你的名字不匹配: IFileInfo 需要的保存供应商,但你给它的缓存提供

I am receiving following error .

The type 'Test.ICacheProvider' cannot be used as type parameter 'TStorageProvider' in the generic type or method 'StorageManager.Test.IFileInfo'. There is no implicit reference conversion from 'StorageManager.Test.ICacheProvider' to 'StorageManager.Test.IStorageProvider'.

Is anything wrong within this program design structure ?

Program :

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

解决方案

The error is in the definition of FileInfo class. You set the template parameter to ICacheProvider but the constraint is that the template argument must be IStorageProvider<ICacheProvider>.

This would probably be better:

public interface FileInfo
          : IFileInfo<IStorageProvider<ICacheProvider>>

Even your names do not match: IFileInfo needs storage provider but you give it cache provider.

这篇关于C#泛型约束问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆