Различия между C # 2 и 3 - PullRequest
       29

Различия между C # 2 и 3

2 голосов
/ 18 июля 2009

Я очень мало знаю о C # или .net, но мне интересно узнать о них.

Одна вещь, которая меня интригует, это то, что я продолжаю слышать, что «C # 3 действительно великолепен».
Это почему? В чем отличие от C # 2. Различия только в C # или в .net?

Заранее спасибо.

Ответы [ 9 ]

11 голосов
/ 18 июля 2009

У меня есть небольшая статья об этом: Руководство Блефера по C # 3 . Очевидно, что в моей книге есть больше подробностей, но этого должно быть достаточно, чтобы вы начали. Короче говоря:

  • Автоматически реализованные свойства:

    public int Value { get; set; }
    
  • Инициализаторы объектов и коллекций:

    Form form = new Form { Size = new Size(100, 100),
                           Controls = { new Label { Text = "Hi" } }
                         };
    List<string> strings = new List<string> { "Hi", "There" };
    
  • Неявно типизированные локальные переменные:

    var x = new Dictionary<string, int>(); // x is still statically typed
    
  • Массивы с неявным типом:

    DoSomething(new[] { "hi", "there"}); // Creates a string array
    
  • Анонимные типы:

    var jon = new { Name = "Jon", Age = 33 };
    
  • Лямбда-выражения (как анонимные методы, но более короткие):

    Func<string, int> lengthFunc = x => x.Length;
    
  • Деревья выражений:

    // Representation of logic as data
    Expression<Func<string, int>> lengthExpression = x => x.Length;
    
  • Методы расширения: (статические методы, которые действуют как методы экземпляра для типа их первого параметра)

    public static string Reverse(this string text)
    {
        char[] chars = text.ToCharArray();
        Array.Reverse(chars);
        return new string(chars);
    }
    
    ...
    
    string hello = "olleh".Reverse();
    
  • Выражения запроса:

    var query = from person in people
                where person.Age > 18
                select person.Name;
    
3 голосов
/ 18 июля 2009

Наиболее заметной темой в C # 3.0 были данные, которые реализуются через Language Integrated Query (LINQ). Для поддержки LINQ были добавлены большинство других функций языка, таких как неявно типизированные локальные переменные, анонимные типы, лямбда-выражения и методы расширения. LINQ - это способ написания SQL-подобных операторов в вашем коде для запросов к различным типам источников данных. Что привлекательно в этом, так это то, что теперь у вас есть общий способ написания кода для доступа к различным источникам данных, а это означает, что вам не нужно полностью заново изучать колесо каждый раз, когда MS вводит новую технологию доступа к данным или вам нужно использовать сторонний источник данных. Поскольку большинство крупных поставщиков баз данных каким-то образом поддерживают LINQ, преимущества этого распространенного способа запроса данных сегодня осознаются.

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

3 голосов
/ 18 июля 2009

Это слишком большой вопрос, лучший источник ответа на ваш вопрос - C # в глубину от Джон Скит

3 голосов
/ 18 июля 2009

Вы можете прочитать все о том, что было представлено в C # 3.0 в статье Википедии .

2 голосов
/ 18 июля 2009

Различия действительно в C #, а не (просто) в .NET.

Самое интересное в том, что с многоцелевым таргетингом в Visual Studio 2008 вы можете использовать большинство изящных вещей из C # 3.0 в .NET 2.x проекте, ранее ограниченном C # 2.0.

Вы не получаете

  • Преобразование дерева выражений,
  • Ключевые слова запроса Linq, [Скит говорит, что вы можете ...]

но вы получите

  • Ламда-выражения [так говорит Скит]
  • Инициализаторы коллекций и объектов
  • Неявно типизированные локальные переменные и анонимные типы, т.е. var
  • Автоматически реализуемые свойства и
  • Частичные определения методов

Итак, просто начните использовать новый синтаксический сахар.

2 голосов
/ 18 июля 2009

Linq, lambda, var keywork, деревья назначения, анонимные объекты, короткий синтаксис свойств, инициализаторы объектов, инициализаторы коллекций, методы расширения.

Но лямбда и методы расширения являются большими. C # 3.0 удивительно хорош.

2 голосов
/ 18 июля 2009

Вот список некоторых новых вещей в 3.0. Много отличных вещей.

1 голос
/ 18 июля 2009

Есть много статей на эту тему:

См .: http://www.developer.com/net/csharp/article.php/3561756

0 голосов
/ 08 февраля 2011

Эволюция C # выглядит так:

  • 1.0: управляемый код
  • 2.0: Дженерики
  • 3.0: LINQ
  • 4.0: динамическое программирование
  • 5.0: асинхронное программирование

См. Слайд 5 в презентации Будущее C # и Visual Basic Андерса Хейлсберга из PDC 10.

...