2011-10-19 5 views
0

저는 추상 기본 클래스 BaseClass이 있다고 가정 해 봅시다. 내가 좋아하는 것인스턴스 메소드의 매개 변수를 인스턴스의 유형으로 제한하십시오.

그것을 나는 방법은 일반적인되고 싶어 다음

public void CopyPropertiesFrom<T>(T source) where T == ThisDerivedClass : BaseClass 
{ 
    // ... 
} 

같이 보입니다 방법을 제공 할 수 있지만, 현재 인스턴스의 대부분의 파생 클래스로 제한 할 수 있습니다. (내 메서드는 리플렉션을 사용하므로 모든 하위 클래스에서 실제로 CopyPropertiesFrom을 재정의 할 필요는 없지만 여전히 컴파일 타임 형식 안전을 원합니다.)

유효한 C#으로 표현하는 방법이 있습니까?

답변

1

표현 방법이 없을뿐만 아니라 컴파일러가 어쨌든 시행 할 수 없습니다. 제네릭의 요점은 시간에 확인할 수 있다는 것입니다. 어떻게 실제로, 당신은 foo.CopyPropertiesFrom<DerivedClass>를 호출해야한다는 불평을 알아야한다 - 당신은

BaseClass foo = new DerivedClass(); 
foo.CopyPropertiesFrom<BaseClass>(new OtherDerivedClass()); 

컴파일러는 BaseClassfoo을 알고 ...이 무엇을 기대?

당신은 방법에서 확인할 물론 수 있습니다 -하지만 난 심지어 일반적인 만들 것 확실하지 않다 :

public void CopyPropertiesFrom(BaseClass other) 
{ 
    if (other.GetClass() != GetClass()) 
    { 
     throw new ArgumentException("..."); 
    } 
} 
1

아니요, 없습니다. 클래스와 파생 클래스 (상속 깊이와는 무관) 만 허용 할 수 있습니다.

관련 문제