как правильнее спроектировать структуру классов
От: Аноним  
Дата: 18.03.14 01:09
Оценка:
Добрый день,Господа!

У меня есть базовый класс


public abstract class MyBase<T>
{
protected T _currentObject;
T CurrentObject
{
 get
 {
   return _currentObject;
 }
}
//... остальные поля не важны
}


у меня также ест дочерние классы , один из них
public class InhClass<T>:MyBase<T> where T : FieldInfo
{
public InhClass(T obj)
{
_currentObject = obj;
}
//... остальные поля не важны
}


вот собственно вопрос :
у меня дочерних классов может быть много, и везде мне придется писать громоздкую конструкцию типа

public class InhClass<T>:MyBase<T> where T : Type


правильно ли это, все классы обобщает то что мне нужно от них получить CurrentObject,но он может быть разного типа,от того эти извращения, может как нибудь проще можно.
Более простым способом вынести T CurrentObject в базовый класс, при этом не городить огороды в дочерних ?


Спасибо за советы!
Re: как правильнее спроектировать структуру классов
От: ykurin  
Дата: 18.03.14 04:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день,Господа!


А>У меня есть базовый класс



А>
А>public abstract class MyBase<T>
А>{
А>protected T _currentObject;
А>T CurrentObject
А>{
А> get
А> {
А>   return _currentObject;
А> }
А>}
А>//... остальные поля не важны
А>}
А>


А>у меня также ест дочерние классы , один из них

А>
А>public class InhClass<T>:MyBase<T> where T : FieldInfo
А>{
А>public InhClass(T obj)
А>{
А>_currentObject = obj;
А>}
А>//... остальные поля не важны
А>}
А>


А>вот собственно вопрос :

А>у меня дочерних классов может быть много, и везде мне придется писать громоздкую конструкцию типа

А>
А>public class InhClass<T>:MyBase<T> where T : Type
А>


А>правильно ли это, все классы обобщает то что мне нужно от них получить CurrentObject,но он может быть разного типа,от того эти извращения, может как нибудь проще можно.

А>Более простым способом вынести T CurrentObject в базовый класс, при этом не городить огороды в дочерних ?


А>Спасибо за советы!



Не понятно, для чего наследный класс тоже шаблон? Вы четко указываете, что T — FieldInfo, так почему бы не написать так:
public class InhClass: MyBase<FieldInfo>
{
public InhClass(FieldInfo obj)
{
_currentObject = obj;
}
//... остальные поля не важны
}

или у вас есть наследники от FieldInfo и вы планируете использовать их в InhClass?

Лучше бы вы описали вашу задачу (без привязки к классам), возможно она имеет другое, более эффективное решение.
Re[2]: как правильнее спроектировать структуру классов
От: Аноним  
Дата: 18.03.14 06:52
Оценка:
Здравствуйте, ykurin, Вы писали:


Y>Не понятно, для чего наследный класс тоже шаблон? Вы четко указываете, что T — FieldInfo, так почему бы не написать так:

Y> public class InhClass: MyBase<FieldInfo>
Y> {
Y> public InhClass(FieldInfo obj)
Y> {
Y> _currentObject = obj;
Y> }
Y> //... остальные поля не важны
Y> }

Y>или у вас есть наследники от FieldInfo и вы планируете использовать их в InhClass?


Y>Лучше бы вы описали вашу задачу (без привязки к классам), возможно она имеет другое, более эффективное решение.


Спасибо

Задача в том что :
Обобщить некоторые общие поля в базовый класс ,которые будут использоваться в дочерних классах, но одно из полей (_currentObject) будет у каждого дочернего класса.
Ну я и подумал может его вынести в базовый класс,зачем я в каждом классе буду описывать его , а потом столкнулся с этой чудо конструкцией

public class InhClass<T>:MyBase<T> where T : Type


,из-за того что в каждом классе (_currentObject) будет иметь свой тип,

Использовать потом хочу как :

List<MyBase> _list = new List<MyBase> {new InhClass(),new ...()}

//и При _list[0].CurrentObject я хочу получить тот объект Дочернего класса типу которого он соответствует,FieldInfo или MethodInfo или тип другого наследника

//хотелось без боксингов, посему посмотрел в сторону дженериков


спасибо за внимание !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.