2014-01-30 2 views
1

이것이 올바른 제목인지는 모르겠지만, 그렇지 않다면 사과드립니다! 내 기본 클래스에서 상속기본 클래스 Generic and inheritance class .NET

내가있어
public class BaseException 
{ 
    public bool HasException { get; set; } 
    public string ExceptionMessage { get; set; } 
} 

다른 클래스 :

public class BoolValue : BaseException 
{ 
    public bool Value { get; set; } 
} 

public class LongValue : BaseException 
{ 
    public bool Value { get; set; } 
} 
을이 발생하면

나는 예외를 저장하는 데 사용되는 기본 클래스를 가지고 내가 그것을 호출 할 때

그래서, 나는 내가 할 수 세트 수 있습니다 일반적인 함수를 생성 할

function LongValue MyFirstFunction() 
{ 
    LongValue data = new LongValue(); 

    try 
    { 
     data = ....  
    } 
    catch (Exception ex) 
    { 
     data = BuildException<LongValue>(ex, data); 
     return data; 
    } 
    finally 
    { 
     data = null; 
    } 
} 

function BoolValue MySecondFunction() 
{ 
    BoolValue data = new BoolValue(); 
    try 
    { 
     data = .... 
    } 
    catch (Exception ex) 
    { 
     data = BuildException<BoolValue>(ex, data); 
     return data; 
    } 
    finally 
    { 
     data = null; 
    } 
} 

될 것입니다 예외 사항 오류가 발생하지만 원래 클래스 형식을 반환 즉 LongValue로 또는 경우 LongBool입니다

protected T BuildException<T>(Exception exception, T obj) 
{ 

} 

하지만은 HasException 및 ExceptionMessage을 설정하는 방법에 확신도 컴파일러는 말하고있다대로 작동하지 않습니다 주조로 나 나는 이런 식으로 뭔가로 내 마지막 기능을 싶습니다 BaseException

((BaseException)data).HasException = true; 

을은 T를 변환 할 수 없습니다 :이 달성 할 수있는 방법이 있나요

protected T BuildException<T>(Exception exception, T data) 
{ 
    ((BaseException)data).HasException = true; 
    ((BaseException)data).ExceptionMessage = exception.Message; 
    return data; 
} 

또는 내 BaseException에 대한 인터페이스를 작성해야합니까?

감사합니다.

+0

있지만 있는지 당신의 디자인은 OK인가? 'Exception' 클래스에서 상속받지 않는'Exception'으로 끝나는 이름을 가진 클래스는 좋은 생각이 아닙니다. – MarcinJuraszek

답변

8
당신의 방법에

설정 generic constraint : 나는이 질문에 대한 아니기 때문에 내 대답에 넣어 싶지 않아

protected T BuildException<T>(Exception exception, T data) where T : BaseException 
{ 
    data.HasException = true; 
    data.ExceptionMessage = exception.Message; 
    return data; 
} 
관련 문제