62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
||||||
1 | ||||||
Метод расширения в универсальном классе25.03.2018, 00:57. Показов 2335. Ответов 7
Метки нет (Все метки)
Доброго времени суток! К своему стыду не знаю как этот прием называется чтоб почитать в мсдн.
В общем хочу реализовать аналог List.Contains() только для своего типа. Знаю как через расширение реализовать, но как это делается для самого класса не могу сообразить. Не могли бы вы подсказать что нужно гуглить?) Добавлено через 18 минут То-есть
0
|
25.03.2018, 00:57 | |
Ответы с готовыми решениями:
7
Ошибка:метод расширения должен быть определен в статическом классе Ошибка: Метод расширения должен быть определен в неуниверсальном статистическом классе В классе OnlyData написать метод, который выводит значение переменной i и вызвать этот метод в том же классе Как в классе Thread реализован вызов run(), если метод run() определён в АВТОРСКОМ классе? |
29 / 31 / 27
Регистрация: 15.11.2017
Сообщений: 121
|
|
25.03.2018, 01:19 | 2 |
Создайте статический метод, который принимает ,к примеру, массив экземпляров вашего типа. Тогда сможете вызывать его так: Тип.Метод().
Если речь идёт о расширяющем методе, то вы должны создать статический класс со статическим методом, который первым аргументом принимает тип с подификатором this.
0
|
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
|
||||||
25.03.2018, 04:24 | 3 | |||||
Sternman,
0
|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
|
25.03.2018, 09:36 [ТС] | 4 |
вы совсем невнимательно читаете
Fleder, Это не то, все равно метод Contains является расширением. Расширение я могу реализовать без перегрузок и наследования. Мне бы хотелось узнать как это реализовано в List-е, чтоб понять "как это устроенно", а не только "как это работает"
0
|
29 / 31 / 27
Регистрация: 15.11.2017
Сообщений: 121
|
|
25.03.2018, 09:55 | 5 |
Sternman, у List, на сколько я знаю, в основе лежит массив. Метод Contains принимает параметром значение, которое он ищет в этом массиве. Если значение найдено возвращается true, иначе false. Надеюсь вы это имели в виду.
0
|
25.03.2018, 09:58 | 6 | |||||
Sternman, если вы реализуете для своего типа, зачем вам его расширение? Гораздо грамотней реализовать функцию внутри класса/структуры, не прибегая к Extensions
И в List-е это реализовано именно так:
1
|
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
|
|
25.03.2018, 10:01 | 7 |
Сообщение было отмечено Sternman как решение
Решение
1
|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
|
25.03.2018, 10:47 [ТС] | 8 |
Именно это я и имел ввиду создавая тему. Мне нужно реализация такого метода внутри класса. То-есть который вызывается и работает по аналогии с расширением но не является им. Как оказалось это чертово расширение только сбивает с толку всех. Но более точно я не знаю как объяснить потому что я банально не знаю как это называется, и не знаю как реализуется.
Добавлено через 12 минут потому что мне именно для массива объектов это и нужно. Только без наследования других классов, структур и реализаций интерфейсов. Реализовать в классе метод через который можно работать с одним объектом - не проблема. Не могу понять как реализовать в классе метод который будет работать с массивом объектов этого класса. Не в отдельном классе, а именно в этом. contains привел чисто для примера чтоб показать какой мне вызов нужен в коде Добавлено через 9 минут похоже я понял в чем моя ошибка. List изначально принимает массив. А я из своего типа делаю массив, а потом пытаюсь выполнить то же что реализовано в List. Наверное без расширения тут всё таки не обойтись.
0
|
25.03.2018, 10:47 | |
25.03.2018, 10:47 | |
Помогаю со студенческими работами здесь
8
В классе Student определите метод InitAr (Метод должен быть статическим) В классе Array есть метод Sort. Можете ли вы улучшить этот метод, если значения в массиве часто повторяются Метод расширения? Метод расширения массива Метод расширения через LINQ Отсутствует метод расширения To() у строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |