Показать сообщение отдельно

  #13  
Старый 04.12.2008, 22:49
jawbreaker
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
С нами: 9391926

Репутация: 234
По умолчанию

Решил добавить список фич в С# в зависимости от версии:
C# 2.0
- ключевое слово partial позволяет разделять реолизацию класса более чем на один файл:
file1.cs:
PHP код:
public partial class MyClass
{
    public 
void MyMethod1()
    {
        
// Manually written code
    
}
} 
file2.cs:
PHP код:
public partial class MyClass
{
    public 
void MyMethod2()
    {
        
// Automatically generated code
    
}
} 
- Обобщённые, или параметризованные типы (generics). В отличие от шаблонов C++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщенного типа не могут быть выражения.
- Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова yield, подобно Python'у.
PHP код:
public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
{
    foreach (
int i in numbers)
    {
        if (
i % 2 == 0) yield return i;
    }
} 
этот код вернёт все чётные числа из numbers
- Анонимные методы, обеспечивающие функциональность замыкания.
- Обнуляемые ('nullable') типы-значения (обозначаемые вопросительным знаком, например, int? i = null, представляющие собой те же самые типы-значения, только могущие принимать также значение null. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL.
PHP код:
int? i = null;
object o = i;
if (
o == null)
    
Console.WriteLine("Correct behaviour - runtime version from September 2005 or later");
else
    
Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)"); 
C# 3.0
- интегрированный язык запросов LINQ(Language-Integrated Query)
PHP код:
int[] array = { 1, 5, 2, 10, 7 };
 
// Выбрать квадраты нечётных чисел в массиве отсортировав в убывающем порядке
IEnumerable<int> query = from x in array
                         
where x % 2 == 1
                         orderby x descending
                         select x 
* x; 
- Инициализация объекта вместе с его свойствами:
PHP код:
Customer c = new Customer { Name="James" }; 
- Лямбда-выражения:
PHP код:
    listOfFoo.Where(delegate(Foo x) { return x.size > 10; });
    
// превратится в
    
listOfFoo.Where(x => x.size > 10); 
- Подразумеваемый тип локальной переменной:
PHP код:
var x = "hello"; 
//вместо 
string x = "hello"; 
- Анонимные типы:
PHP код:
var x = new { Name = "James" }; 
- Методы-расширения — добавление метода в существующий класс с помощью ключевого слова this при первом параметре статической функции.
PHP код:
public static class StringExtensions
{
    public static 
string Left(this string s, int n)
    {
        return 
s.Substring(0, n);
    }
}
 
string s = "foo";
s.Left(3); // то же что и StringExtensions.Left(s, 3); 
C# 3.0 будет совместим с C# 2.0 по генерируемому MSIL-коду; улучшения в языке — чисто синтаксические и реализуются на этапе компиляции. Например, многие из интегрированных запросов LINQ можно уже сейчас осуществить, используя безымянные делегаты в сочетании с предикатными методами над контейнерами вроде List.FindAll и List.RemoveAll.
 
Ответить с цитированием