ФорумПрограммированиеПыхнуть хотите?F.A.Q. → C#/.NET маленькие чудеса: ограничение обобщений при помощи условия where

C#/.NET маленькие чудеса: ограничение обобщений при помощи условия where

  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 1:09

    Попробовал перевести C#/.NET Little Wonders: Constraining Generics with Where Clause


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

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

    Однако, обобщения C# иногда введут себя совсем иначе, чем ихние двоюродные братья C++ шаблоны. Существует одно удобное положение, которое поможет обойти эти воды и сделает ваши обобщения более мощными…
    Спустя 19 сек.
    Упс, перевод здесь - http://gautama-it.blogspot.com/2011/01/cnet-where.html
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 1:21, спустя 11 минут 48 секунд

    krasun, круто, но это фундаментальная вещь ))
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 1:32, спустя 10 минут 56 секунд

    kostyl, я знаю, просто ради интереса перевел.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 21 января 2011 г. 1:37, спустя 5 минут 24 секунды

    kostyl, ты гитару ни рзу не видел? чо так разглядываешь?
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 1:40, спустя 2 минуты 46 секунд

    ты гитару ни рзу не видел? чо так разглядываешь?

    я играю в это время, не понятно конечно, но я вроде Моцарта валю в это время ;)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 3:00, спустя 1 час 20 минут 18 секунд

    нормальная аватара. Дуд, тебе лишь бы доебаться
    Спустя 38 сек.
    по сабжу: а вот если я понятия не имею о всех этих шаблонах ваших из сишки - я хуевый программист значит?
    Спустя 40 сек.
    не, ну как, я что-то там краем уха слышал, там какие-то списки вроде, <> - от такие знаки фигурируют, но что это - беспонятия
    Спустя 46 сек.
    ну, я как бы и без этого славно программирую на аяксе, может оно мне и не нужно?
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 3:01, спустя 42 секунды

    Как обобщенный тип может быть ссылочным типом, также само он может быть и типом значений.

    :D
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 21 января 2011 г. 3:01, спустя 8 секунд

    Дуд, тебе лишь бы доебаться

    бля, спалился
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 3:02, спустя 35 секунд

    это типа Traits?
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 4:04, спустя 1 час 1 минуту 59 секунд

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

    То есть алгоритм, который, например, делает одно и тоже для чисел, строк, массивов, можно обобщить и сделать его более абстрактным. В этом случае ты пишешь, тот же алгоритм, который работает с обобщенным типом (например, типом значений, а это обычные примитивные типы, структуры и так далее). Потом, ты вызываешь уже этот метод, подставляя вместо обобщенного типа свой конкретный, например, ты хочешь, что бы метод работал с int. И ахуенчик, оно компилируется в полноценный метод с интом.

    Или, другой пример, есть списки (List), они работают с обобщенными типами данных (generic type), при создании объекта списка, ты конкретезируешь типы элементов, которые будут в нем хранится:

    List<int> listOfInts = new List<int>();

    И он так же само будет работать для строк и так далее. Оно скомпилируется в полноценный список интов.
    Один из самых больших плюсов это строгая типизация здесь. Почему?

    Потому, что можно было достичь такого же эффекта и без обобщений. Например,

    ArrayList listOfAnyObjects = new ArrayList();

    Этот список будет хранить любые объекты, и инты и строки и т.д. Как в php - обычный массив. И о любых ошибках ты будешь узнавать во время выполнения.

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

    Короче, как по мне, так оно приятно, у меня уже даже почти получилось это применить. Пытаюсь написать библиотеку валидаторов, которая будет валидировать обобщенный тип, но последнее время сомневаюсь, что так правильно.


    ну, я как бы и без этого славно программирую на аяксе, может оно мне и не нужно?

    Я думаю, парится не стоит, ибо оно и не как не подойдет в мир php и javascript, там такие ситуации разруливаются по-своему. Те задачи, которые я решаю на C#, например, также и решаются на php, да много не хватает после C#. Но это не есть проблема, здесь не хуже, здесь по-другому. Поэтому парится не стоит


    Блять, ну я написал, надеюсь, ты хоть, что-то поймешь

    P.S Ненавижу такие фразы, но у меня это уже как ритуал

    Блять, ну я написал, надеюсь, ты хоть, что-то поймешь

    Спустя 199 сек.
    я играю в это время, не понятно конечно, но я вроде Моцарта валю в это время

    Сколько времени ты учился, что бы сыграть Моцарта? По нотам играешь?
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 21 января 2011 г. 10:38, спустя 6 часов 34 минуты 28 секунд

    Сколько времени ты учился, что бы сыграть Моцарта? По нотам играешь?

    да за 5 минут подобрал кусочек, ты же не слышал как я играл (я имею в виду не факт что я качественно это делал), вот только не знаю Моцарт это или нет, это кусок из фильма "Концерт" где цыган на скрипке валит (прикольный момент там есть)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!