Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MyList<T> получить инфу о T / 15 сообщений из 15, страница 1 из 1
09.09.2013, 13:57
    #38390955
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Пришлось делать обертку над List<T> для реализации одного нужного метода GetProperties().
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class ParameterList<T>:ParameterObject
    {
        private List<T> list_ = new List<T>();
        public List<T> list
        {
            get { return list_; }
        }
        public string[] GetProperties()
        {
               ..................
        }
     }


Внутрях этого метода нужно понять, что это у нас за Т (является ли он наследником от SomeBaseClass). Как это лучше сделать? Кроме как
Код: sql
1.
2.
3.
4.
5.
6.
if (list_.Count > 0)
{
     SomeBaseClass test_ = list_[0] as SomeBaseClass;
     if (test_ != null)
     {}
}
...
Рейтинг: 0 / 0
09.09.2013, 14:02
    #38390965
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Блин, isSubclassOf жеж, извините
...
Рейтинг: 0 / 0
09.09.2013, 14:03
    #38390966
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Pallarisявляется ли он наследником от SomeBaseClass
is?

P.S. А оформить в отдельный extension метод никак?
...
Рейтинг: 0 / 0
09.09.2013, 14:05
    #38390971
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
МСУP.S. А оформить в отдельный extension метод никак?

Не, в этом случае придется костыли в других местах расставлять.
...
Рейтинг: 0 / 0
09.09.2013, 15:57
    #38391171
Torre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Pallaris, сдается мне неправильный подход. LSP?
...
Рейтинг: 0 / 0
09.09.2013, 16:29
    #38391222
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Не понял про LSP.

Прога в процессе работы 'решает' множество различных путей вида "СИСТЕМА:ЗАДАНИЕ:ПЕРЕМЕННЫЕ:varTest:ЗНАЧЕНИЕ". Пользователю в процессе ввода таких путей предоставляется интерфейс по типу InteliSens. Сначала решается глобальная переменная СИСТЕМА (подставляется управляющий объект проги, допустим master), затем после двоеточия решается 'ЗАДАНИЕ' (для объекта master ищется свойство ЗАДАНИЕ) через метод GetProperties() у объекта master, затем для задания ищется ПЕРЕМЕННЫЕ. Но за объектом 'переменные' лежит List<sysVar>, который конечно же ничего не знает про GetProperties(). Поэтому вариантов было два - либо на этапе решения ставить костыль

Код: c#
1.
2.
3.
4.
5.
IEnumerable ienum_ = currentCompileObject_ as IEnumerable;
if (ienum_ is not null)
{

}



либо Listу давать нужные свойства, что я считаю более правильным на данный момент
...
Рейтинг: 0 / 0
09.09.2013, 16:39
    #38391249
Torre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Про LinkedList не будешь спрашивать?
...
Рейтинг: 0 / 0
09.09.2013, 16:46
    #38391263
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Torre,

ты кому?
...
Рейтинг: 0 / 0
10.09.2013, 14:27
    #38392272
Torre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Pallaris, в данном случае имеет место нарушение Liskov Substitution Priciple (LSV)
...
Рейтинг: 0 / 0
10.09.2013, 14:32
    #38392287
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Torre,

в чем нарушение, поясни.

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


Я наследуюсь от своего класса ParameterObject, а не от листа - раз. Дочерний класс реализует функционал, расширяющий базовый - два.
...
Рейтинг: 0 / 0
10.09.2013, 14:59
    #38392349
Torre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
PallarisЯ наследуюсь...Не имеет значение, если ты пришел к тому что тебе нужно знать тип, значит ошибка выше по коду. Тип тебя не долен интересовать, используй полиморфизм, оперируй абстракциями.
...
Рейтинг: 0 / 0
10.09.2013, 15:12
    #38392377
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
PallarisВнутрях этого метода нужно понять, что это у нас за Т (является ли он наследником от SomeBaseClass).
Понять нельзя, можно только ограничить . Generic-параметр не может быть ограничен какой-то неявной логикой внутри реализации - а только теми ограничениями, которые явно продекларированы в контракте generic-типа.
...
Рейтинг: 0 / 0
10.09.2013, 15:19
    #38392385
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
TorreНе имеет значение, если ты пришел к тому что тебе нужно знать тип, значит ошибка выше по коду. Тип тебя не долен интересовать, используй полиморфизм, оперируй абстракциями.

Согласен. Думаю.
...
Рейтинг: 0 / 0
10.09.2013, 15:32
    #38392410
Andrew1411
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
Pallaris,

странное обсуждение. Если его не читать, исходя из первичного вопроса - ответ Type.GetGenericArguments()
...
Рейтинг: 0 / 0
10.09.2013, 16:01
    #38392469
Torre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MyList<T> получить инфу о T
PallarisСогласен. Думаю.Это нормально, называется "точка принятия решения". Если дошел до макарон, значит время наступило.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MyList<T> получить инфу о T / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]