2012-12-03 11 views
1

저는 캐스트를 입력해야하는 다른 네임 스페이스에 두 개의 클래스가 있습니다.타입 캐스트 클래스

한 클래스의 캐스트 객체를 다른 클래스에 입력하는 방법. 두 클래스 모두 동일한 메서드와 속성을가집니다.

반영이 적용 되나요? 클래스의 유형 변환 예제는 도움이 될 것입니다.

+1

어떤 방식 으로든 관련이 없으므로 전송할 수 없습니다. 이것은 [AutoMapper] (https://github.com/AutoMapper/AutoMapper)와 같은 작업입니다. –

+0

나는 당신이 * 캐스팅 *이 아닌 * 맵핑을 찾고 있다고 생각한다. – sloth

+0

여기에 예제가 많이 있습니다. http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/808ad927-385f-49c9-aace-256eefe659d7 –

답변

2

당신은 한 유형에서 다른 유형으로 직접 캐스팅 할 수 없습니다, 당신은 할 수 있습니다 :

  1. 수동 매핑
  2. 자동 반사를 사용하여
  3. 지도 (때에 프로퍼티 이름이 동일로)
  4. 사용 AutoMapper
1

어떤 방식 으로든 관련이 있지 않으면 캐스팅 할 수 없습니다 (예 : 다른 하나의베이스).

당신은 하나가 매퍼를 사용하여 것, 여러 가지 방법으로 다른 하나를 매핑 할 수는 AutoMapper을 기반으로 다른 하나에서 잘 알려진 하나

https://github.com/AutoMapper/AutoMapper

이 줘야지도입니다 반원 이름은 클래스 어떠한 방식으로 관련되지 않은 경우

0

다른 용액 (일부 형태 매핑) dynamic 이용 될 수있다. 이 너무 위험하지만, 가능한 옵션 중 하나처럼 간주 할 수있는 경우 이벤트 : 당신이 안전한 정적 유형 세계를두고 동적 강력한 엉망으로 뛰어

namepsace A { 
    public class NotRelatedA() { 
     public void Run() {} 
    } 
} 

namepsace B { 
    public class NotRelatedB() { 
     public void Run() {} 
    } 
} 


dynamic dyn = new A.NotRelatedA(); 
dyn.Run(); //Run A 

dyn = new B.NotRelatedB(); 
dyn.Run(); //Run B, without changing and mapping anything 

반복이 때문에, 가지 위험 당신이 그것을 사용한다면, 원인과 함께 사용하십시오.

0

해당 클래스에는 몇 개의 속성이 있습니까? 그들은 "손으로 쓰는"수업입니까?

어쩌면 두 개의 클래스가 필요하지 않을 수 있으며 그 중 하나를 삭제하고 다른 하나를 사용할 수 있습니까?

아마도 하나의 클래스가 다른 클래스에서 파생 될 수 있습니까? 그런 다음 기본 클래스에 공통 속성 및 메서드 만 작성하면됩니다.

    : (이 하나가 (참조 변환 캐스트) 허용하는 "일반"캐스트에 대한이 msut 상황입니다) 다른에서 두 가지 클래스 및도 도출이 필요하면

    , 당신은 몇 가지 옵션이 있습니다

  1. 다른 클래스의 인스턴스를 매개 변수로 사용하는 클래스 중 하나에 대한 생성자 오버로드를 작성하거나
  2. 한 클래스의 인스턴스를 다른 유형의 새 객체로 "변환"하는 정적 메소드를 작성하거나
  3. "번역"을 수행 한 public static explicit operator ClassOne(ClassTwo ct)을 쓸 수 있습니다. 이를 통해 표준 캐스트 구문 (예 : (ClassOne)variable) 또는
  4. 을 사용할 수 있습니다. 다른 사람이 제안했듯이 매핑 도구를 사용하거나 "유사하게 보이는"속성을 찾는 사용자 자신의 반사 코드를 작성할 수 있습니다 그들.