문제

"Baseclass"라는 클래스가 있습니다. 이 클래스에서 나는 클래스 이름을 상속받습니다

베이스 클래스에는 a를 반환하는 공개 기능이 포함되어 있습니다 HashSet<baseClass>. 상속 클래스에서 호출되면 반환 유형은 분명히 여전히 HashSet<baseClass>, 그러나 나는 필요하다 HashSet<inheritedClass>.

전환 알라 (HashSet<inheritedClass>) returnValue, 여기서 returnValue가 유형 인 경우 HashSet<baseClass> 작동하지 않습니다.

각 요소를 수동으로 변환하지 않고 해시 유형을베이스 클래스에서 상속 클래스로 변환하는 방법이 있습니까?

미리 감사드립니다, 프랭크

도움이 되었습니까?

해결책

태그에서 C#을 의미합니까? HashMap 자바 유형입니다. 또한 일반적으로 하나가 아닌 두 가지 유형 매개 변수가 있습니다 ...

C#에서 일반 클래스는 항상 변하지 않습니다. 약간 인터페이스 ~ 할 것이다 C# 4에서는 변형되지만 매우 적습니다 (하나만 출력 positiion에서 유형 매개 변수를 사용하십시오. IEnumerable<T>, 또는 입력 위치에서 유형 매개 변수를 사용하십시오 (예 : IComparable<T>).

상황에 대한보다 정확한 정보를 제공 할 수 있다면, 특히 LINQ와 함께 LINQ를 사용할 수 있다면 간단한 솔루션을 제시 할 수있을 것입니다. Cast<T>() 방법.

편집 : 좋아요 HashSet<T>:

HashSet<BaseType> baseSet = ...;
var derivedSet = new HashSet<DerivedType>(baseSet.Cast<DerivedType>());

C# 4를 사용하더라도 컴파일러가 모든 값을 알지 못하기 때문에 baseSet 인스턴스입니다 DerivedType - 실행 시간 확인이 있어야합니다. 반전 (생성 a HashSet<BaseType> a HashSet<DerivedType>) ~일 것이다 C# 4에서 일하십시오.

추가 편집 : 만 사용하려는 경우 UnionWith, 그것은 필요하지 않습니다 HashSet<DerivedType> - 필요합니다 IEnumerable<DerivedType>. 나는 당신이 할 것을 제안합니다 :

HashSet<BaseType> baseSet = ...;
HashSet<DerivedType> derivedSet = ...;

derivedSet.UnionWith(baseSet.Cast<DerivedType>());

다른 팁

여기에 해결책이 있습니다

//**Your BaseClass**
public class BaseClass<T> where T : BaseClass<T>
{
    public HashSet<T> GetHashSet()
    {
        HashSet<T> _hSet = new HashSet<T>();
        //do some work              
        //create a HashSet<T> and return;              
        return _hSet;
    }
}
//**Your Inherited/Derived Class**
public class InheritedClass : BaseClass<InheritedClass>
{
    //you have the method inherited as you need.}
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top