2012-12-07 3 views
1

동일한 방식으로 객체를 처리하는 클래스가 있습니다. 이 같은입니다 :C#의 일반 및 객체 변환

class Handler<T>{ 
    private T _obj; 
    public T obj{ 
     get{ 
      ...//do sth 
      return _obj; 
     } 
     set{ 
      ...//do sth 
      _obj = value; 
     } 
    } 
    ... // some other properties, no T anymore 
} 

유형을 무시하고, Handler 개체에 대한 작업 코드의 많은 양의가 있습니다. 내 말은, 타입이 T이 아니기 때문에 다른 필드를 설정하고 있다는 뜻입니다. Handler<> 등의 컨테이너가 있습니다.

결국 올바른 유형의 핸들러를 반환해야합니다.

Handler<object>을 사용하고 싶었지만 Handler<SomeClass>으로 변환 할 방법이 없습니다.

어떻게 이런 상황을 처리 할 수 ​​있습니까?

+0

문제의 코드를 표시하십시오. –

+0

아마도 도움이 될 것입니다. http://stackoverflow.com/questions/4092393/value-of-type-t-cannot-be-converted-to –

+0

무엇이 질문입니까? –

답변

3

Handler<T>의 기본 클래스를 만들면 비 제너릭 코드가 모두 포함됩니다.

class HandlerBase 
{ 
    // some other properties 
} 

class Handler<T> : HandlerBase 
{ 
    public T obj { ... } 
} 

당신의 "코드의 많은 양"이 HandlerBase와 함께 작업 할 수보다 T 무시합니다.

0

IHandler 인터페이스로 시도 할 수 있습니다.

IHandler<SomeClass> h1 = new Handler<SomeClass>(); 
IHandler<Object> h2 = h1; 


Covariance on MSDN에 대한 자세한 정보