singlepost

Новые (или не новые) возможности C# << На главную или назад  

Хочется провети опрос по поводу любимых и наиболее часто используемых возможностей данного языка, появившихся в новом фреймворке (да и в старых тоже).

25 ответов в теме “Новые (или не новые) возможности C#”

  1. 25
    Алексей Бобьяков ответил:

    Александр Senpay Пушкарев:
    > Возможно я консервативен слишком – я вот си и жаву люблю и хоть тресни :D

    Возможно :-) Всё-таки C# и .NET вообще развиваются гораздо быстрее, чем Java и JVM, что привлекает любителей функциональных и динамических языков.

    Смотрите, например, //en.wikipedia.org/wiki/Dynamic_Language_Runtime и //en.wikipedia.org/wiki/Da_Vinci_Machine

  2. 24
    Александр Сапрыкин ответил:

    Значит не прав. Давно не слежу уже за развитием проекта. Может даже появится желание посмотреть на него поближе еще раз.

  3. 23
    Алексей Бобьяков ответил:

    Александр cutwater Сапрыкин:
    > Тем более если не ошибаюсь он сейчас на уровне 1.1 фреймвокра.

    Ошибаетесь, Mono сейчас в промежуточном состоянии между .NET 2.0 и 3.5. Например, поддерживаются C# 3.0, Window Forms 2.0, LINQ to XML, LINQ to Objects.

    Текущий статус можно посмотреть здесь: //www.mono-project.com/Roadmap#Mono_1.9

    Mono нужен тем, кто хотел бы иметь C# на платформах, отличных от Windows.

  4. 22
    Александр Сапрыкин ответил:

    Немного с запозданием но отвечу. О моно слышал, не в деревне живем без инету. Моно не нужен. Тем более если не ошибаюсь он сейчас на уровне 1.1 фреймвокра. Просто есть уже стабильная платформа – джава. И моно не дотянет в ближайшее время до джавы или .NET. Хотя сам по себе проект интересный.

  5. 21
    Александр Пушкарев ответил:

    ну каждый останется при своем я думаю) моно как проект мне лично нравится. Но технология .нет мне лично не очень симпатично. Возможно я консервативен слишком – я вот си и жаву люблю и хоть тресни :D

  6. 20
    Алексей Бобьяков ответил:

    2 Михаил m0zzzG Шаханов:
    Monkey patching… Это скорее зло, чем полезный функционал, ИМХО :-)

  7. 19
    Ванько Родригез ответил:

    Александр, пытался :) Если не использовать Windows Forms то в общем-то возможно. Оно и понятно, Windows Forms как джавовский SWT использует для отрисовки API ОС (а не как Swing, который рисует контролы сам). Mono же изначально не расчитан исключительно на какую-то одну платформу, поэтому у него есть (неравноценная) замена — GTK#. И не стоит забывать — Mono – молодой проект и от текущей версии .NET отстает минимум на 2 года.

  8. 18
    Алексей Бобьяков ответил:

    yield в C# используется для ленивых вычислений.

    О ленивых вычислениях: //ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BD%D0%B...

    О ленивых вычислениях в C# (и их примерная реализация): //blogs.msdn.com/pedram/archive/2007/06/02/lazy...

  9. 17
    Алексей Бобьяков ответил:

    Александр Senpay Пушкарев:
    > интересно, Иван, пытались ли вы код написаные в вижул студио на моно откомпилировать? будете очень удевленны.

    Я пытался, и да, был очень удивлён. Довольно сложное приложение, которое активно использовало Window Forms и сеть, практически без использования напильника заработало в OpenSUSE.

  10. 16
    Александр Пушкарев ответил:

    интересно, Иван, пытались ли вы код написаные в вижул студио на моно откомпилировать? будете очень удевленны.

  11. 15
    Михаил Шаханов ответил:

    В данный момент я пишу на руби, и мне было приятно увидеть новые возможности инициализации:
    var myVar = new MyClass { MyProp1 = val1, MyProp2 = val2 };
    и расширения для классов:
    public static class StringExtension {
    public static string Capitalize(this string str) {
    // какой-то код
    }
    }

    Сделав это, можно спокойно писать:
    var str = "vasya";
    Console.WriteLine(str.Capitalize());
    Понятно, что это просто синтаксический сахар и компилятор переделает этот код в вызов статического метода, но всё равно приятно =)

  12. 14
    Ванько Родригез ответил:

    > 2. ИМХО для джавы в том числе и свинг требования к ресурсам еще простительны, скорость как плата за кроссплатформенность.

    .NET тоже кроссплатформенный, просто полная реализация в настоящее время существует для одной платформы (не считая Windows Mobile). Прочитайте про Mono.

  13. 13
    Valentin Pimenov ответил:

    Только начал осваивать новшества языка, переведя на него свой старый проект. Поэтому однозначно удобной фичей считаю автоматической выведение типа локальной переменной из инициализатора (т.е. ключевое слово 'var').

  14. 12
    Александр Сапрыкин ответил:

    1. Работал. Знаю. Плевался долго, но приходилось.

    2. ИМХО для джавы в том числе и свинг требования к ресурсам еще простительны, скорость как плата за кроссплатформенность.

    3. Холивар начался бы, если бы я в бреду пытался доказать, что Java/Python/Brainfuck круче чем ваш .NET.

    4оно же главное. Холивар не нужен. Тема ведь о "фичах" языка и платформы.
    А требования к ресурсам всего лишь очередная "фича" ;)

  15. 11
    Михаил Чиркин ответил:

    2Михаил m0zzzG Шаханов.

    Вопрос насчет yeild меня сильно заинтересовал, поэтому провел маленькое исследование.

    Про генерацию yeild нашел вот что:
    When the compiler sees yield return it emits a nested private class. This nested private class will be named something like <Get>d__0. More importantly, the nested class implements IEnumerable, IEnumerator, and IDisposable. In short the dynamically generated class is a kind of state machine that uses an enumerator (an implementation of the Iterator behavior pattern) to keep track of where your code is in the iteration process.

    То есть походу он строит конечный автомат на основе кода метода, при этом часть состояний этого автомата соответствуют вызовам yeild. По сути это приводит к тому что код метода выполняется не полностью, а ровно столько сколько надо вызывающему коду.

    Пример:
    public static IEnumerable<string> YeildTest()
    {
    Console.WriteLine("1st");
    yield return "string 1";
    Console.WriteLine("2nd");
    yield return "string 2";
    Console.WriteLine("3rd");
    }

    Если мы заберем только первый элемент:
    foreach(string s in YeildTest())
    {
    Console.WriteLine(s);
    break;
    }
    То вывод будет:
    >1st
    >string 1
    А если все:
    foreach(string s in YeildTest())
    {
    Console.WriteLine(s);
    }
    То вывод будет:
    >1st
    >string 1
    >2nd
    >string 2
    >3rd

    Поэтому истинными (ИМХО) кажутся следующие утверждения:
    1) Не следует особо мудритьс кодом метода в котором используется yeild, дабы компилятор не свихнулся (и не налажал) переделывая его в конечный автомат
    2) Можно смело использовать yeild в случае если будет нужна только часть возвращаемых значений, лишней работы (а следовательно и падения производительности) не произойдет

  16. 10
    Михаил Шаханов ответил:

    Пошол холивар, надо поучаствовать =)
    2Александр cutwater Сапрыкин – Самое страшное в холиварах — это то, что они появляются на пустом месте и их зачинщики всегда забывают аргументировать свой ответ. Чем вам WPF-то не угодил? Вы с ним работали хотя бы? Если да, то скажите, пожалуйста, сколько он у вас отожрал ресурсов. На моей допотопной машине с 256мб озу можно терпеть, а приналичии гб+ всё работает просто отлично.

  17. 9
    Ванько Родригез ответил:

    Александр, Java в среднем жрет не меньше. Один Swing чего стоит :)

  18. 8
    Александр Сапрыкин ответил:

    это фичей языка то назвать нельзя. единственное в чем у .NET нет равных, так это быстрое создание юзеринтерфейса под винду и по части отжирания ресурсов.(эт я о 3.5 и WPF)

  19. 7
    Ванько Родригез ответил:

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

  20. 6
    Slava Gerchicov ответил:

    на мой взгляд, самое удобное в C# – везде можно дописать после функции или класса ".tostring()" – иногда очень помогает, по крайней мере во многих языках такого не видел

  21. 5
    Александр Сапрыкин ответил:

    2 Александр Senpay Пушкарев
    поддерживаю

  22. 4
    Александр Пушкарев ответил:

    а я предпочитаю избегать платформо-зависимые технологии… мне как то java и c++ ближе

  23. 3
    Михаил Шаханов ответил:

    Меня интересуют итераторы, в частности конструкции с yield return. Возможность очень удобная, только я так и не понял, как это работает (на уровне MSIL), и следовательно, оценка производительности. Я пытался смотреть дизасемблированный код, но честно говоря, мало понял из сгенерённых конструкций (в частности, там генерится явно итератор, но вот сам алгоритм работы остался для меня загадкой).

  24. 2
    Евгений Думанский ответил:

    - анонимные классы
    - лямбда-выражения
    - дженерики (обобщения)

  25. 1
    Ванько Родригез ответил:

    LINQ

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.