2011-12-14 5 views
1

accessBehavior変数を正しく設定するにはどうすればよいですか?これを正しくキャストするにはどうすればよいですか?

public sealed class FileAccess : ProjectAccess, IAccess<File> 

    interface IAccess<T> where T : ITfsType 



     public abstract class Access<T> 
     { 
      private IAccess<T> accessBehavior; 
      public Access() 
      { 
       FileAccess fa = new FileAccess(); 
       accessBehavior = //what to assign? 
      } 
     } 
+3

これは紛らわしく、ITfsTypeという名前のパラメータに 'string'型のパラメータとITfsTypeという型がありますか? –

+0

はファクトリを使用するため、文字列が渡されます。 – dbobrowski

+0

私はそれを削除しました...それは私の質問とは無関係です – dbobrowski

答えて

0
FileAccess fa = new FileAccess(); 
IAccess<T> test = fa as IAccess<T>; 

これは私の回答でした。私は今IAccessインターフェイスでテストとやり取りできますが、割り当てられた具体的な型はFileAccessです。

2

あなたの持っているものに基づいてキャストする方法はありません。 FileAcccessIAccess<File>を実装していますが、accessBehaviorの型引数は不明です。 Tはどんなタイプでもよく、Fileの間には関係がありません。

あなたのようなものがあった場合:

private IAccess<File> accessBehavior; 

を次に、あなたはそれを割り当てることができます。そうしないと、次のような非ジェネリックベースのインタフェース、必要があるでしょう:

public interface IAccess { 
} 

public interface IAccess<T> : IAccess { 
} 


public abstract class Access<T> 
{ 
    private IAccess accessBehavior; 

    public Access() 
    { 
     FileAccess fa = new FileAccess(); 
     accessBehavior = fa; 
    } 
} 

をしかし、あなたはIAccessのメンバーにジェネリック型パラメータの強い型付けを失うだろう。

関連する問題