2014-01-30 4 views
1

Я не знаю, является ли это правильным заголовком, поэтому извиняйтесь за это, если это не так!Базовый класс Общий класс и класс наследования .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, так как даже литье она не работает, как компилятор говорит я не могу преобразовать T к BaseException

((BaseException)data).HasException = true; 

Я хотел бы мою последнюю функцию будет что-то вроде этого:

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

есть ли способ, я могу добиться этого или должен ли я просто создать интерфейс для моего BaseException?

Спасибо.

+0

Я не хочу, чтобы положить его в мой ответ, потому что это не про ваш вопрос, но вы уверены, что ваш дизайн в порядке? Класс с именем, заканчивающимся на «Исключение», который не наследуется от класса «Исключение», может не быть хорошей идеей. – MarcinJuraszek

ответ

8

Набор generic constraint на вашем методе:

protected T BuildException<T>(Exception exception, T data) where T : BaseException 
{ 
    data.HasException = true; 
    data.ExceptionMessage = exception.Message; 
    return data; 
} 
Смежные вопросы