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

FileInfoIFileInfoは、 type のジェネリック引数を持つとして宣言されていICacheProviderます。ただし、 sIFileInfoのみを受け入れるようにするという制約がありますIStorageProvider。でICacheProviderはありませんIStorageProvider

于 2013-03-27T10:07:17.863 に答える