2011-12-14 3 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

이것은 혼란 스럽습니다. 유형이'string'이고 유형이 ITfsType 인 ITfsType이라는 매개 변수가 있습니까? –

+0

은 팩토리를 사용하므로 문자열이 전달됩니다. – dbobrowski

+0

나는 그것을 제거했다 ... 그것은 내 질문에 관련이 없다. – dbobrowski

답변

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

이것은 내 대답이었습니다. 이제 IAccess 인터페이스로 테스트 할 수 있지만 할당 된 구체적인 유형은 FileAccess입니다.

2

보유하고있는 것을 기반으로 변환 할 방법이 없습니다. FileAcccessIAccess<File>을 구현하지만 accessBehavior의 유형 인수를 알 수 없습니다. 모든 유형이 될 수있는 TFile 사이에는 관계가 없습니다.

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의 구성원에 제네릭 형식 매개 변수의 강력한 입력을 잃을 것입니다.

관련 문제