Jump to content

Си Шарп 2.0

В программирования языке C# в версии 2.0 представлено несколько новых функций (соответствующих 3-му изданию стандарта ECMA-334 и .NET Framework 2.0 ). К ним относятся:

Возможности С# 2.0

[ редактировать ]

Частичный класс

[ редактировать ]

Частичные классы позволяют распределить реализацию класса между несколькими файлами, при этом каждый файл содержит один или несколько членов класса. Это полезно, прежде всего, когда части класса генерируются автоматически. Например, эта функция активно используется дизайнерами пользовательского интерфейса, генерирующими код в Visual Studio .

файл1.cs:

public partial class MyClass
{
    public void MyMethod1()
    {
        // Manually written code
    }
}

файл2.cs:

public partial class MyClass
{
    public void MyMethod2()
    {
        // Automatically generated code
    }
}

Дженерики

[ редактировать ]

Обобщения , или параметризованные типы, или параметрический полиморфизм — это функция .NET 2.0, поддерживаемая C# и Visual Basic. В отличие от шаблонов C++, параметризованные типы .NET создаются во время выполнения, а не компилятором; следовательно, они могут быть межъязыковыми, тогда как шаблоны C++ не могут. Они поддерживают некоторые функции, не поддерживаемые напрямую шаблонами C++, такие как ограничения типа для универсальных параметров с помощью интерфейсов. С другой стороны, C# не поддерживает универсальные параметры, не относящиеся к типам. В отличие от дженериков в Java, дженерики .NET используют реификацию , чтобы сделать параметризованные типы первоклассными объектами в виртуальной машине CLI , что позволяет оптимизировать и сохранять информацию о типах. [1]

Статические классы

[ редактировать ]

Статические классы — это классы, экземпляры которых не могут быть созданы или унаследованы и которые допускают только статические члены. Их назначение аналогично назначению модулей во многих процедурных языках.

Функциональность генератора

[ редактировать ]

Платформа .NET 2.0 Framework позволила C# ввести итератор , обеспечивающий генератора , используя функциональность yield return построить аналогично yield в Питоне . [2] С yield return, функция автоматически сохраняет свое состояние во время итерации.

// Method that takes an iterable input (possibly an array)
// and returns all even numbers.
public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
{
    foreach (int i in numbers)
    {
        if (i % 2 == 0) 
            yield return i;
    }
}

Существует также yield break оператор, в котором управление безоговорочно возвращается вызывающему итератору. Существует неявное yield break в конце каждого метода генератора.

Анонимные делегаты

[ редактировать ]

В качестве предшественника лямбда-функций, представленных в C# 3.0, в C# 2.0 добавлены анонимные делегаты. Они обеспечивают замыканию . функциональность C#, подобную [3] Код внутри тела анонимного делегата имеет полный доступ на чтение и запись к локальным переменным, параметрам метода и членам класса в области делегата, за исключением out и ref параметры. Например:-

int SumOfArrayElements(int[] array)
{
    int sum = 0;
    Array.ForEach(array,
        delegate(int x)
        {
            sum += x;
        }
    );
    return sum;
}

В отличие от некоторых реализаций замыкания, каждый экземпляр анонимного делегата имеет доступ к одной и той же относительной ячейке памяти для каждой связанной переменной, а не к фактическим значениям при каждом создании. См. более полное обсуждение этого различия.

Делегировать ковариацию и контравариантность

[ редактировать ]

Преобразования из групп методов в типы делегатов являются ковариантными и контравариантными по типам возвращаемых значений и параметров соответственно. [4]

Доступность методов доступа к свойствам может быть установлена ​​независимо.

[ редактировать ]

Пример:

string status = string.Empty;

public string Status
{
    get { return status; }             // anyone can get value of this property,
    protected set { status = value; }  // but only derived classes can change it
}

Типы значений, допускающие значение NULL

[ редактировать ]

Типы значений, допускающие значение NULL (обозначаются знаком вопроса, например int? i = null;), которые добавляют null к набору разрешенных значений для любого типа значения. Это обеспечивает улучшенное взаимодействие с базами данных SQL, которые могут иметь столбцы с нулевым значением типов, соответствующих примитивным типам C#: INTEGER NULL тип столбца напрямую переводится в C# int?.

Типы значений, допускающие значение NULL, получили усовершенствование в конце августа 2005 года, незадолго до официального запуска, для улучшения характеристик упаковки : переменная, допускающая значение NULL, которой присвоено значение NULL, на самом деле не является пустой ссылкой, а скорее экземпляром struct Nullable<T> с недвижимостью HasValue равный false. В упаковке Nullable Упаковывается сам экземпляр, а не значение, хранящееся в нем, поэтому результирующая ссылка всегда будет ненулевой, даже для нулевых значений. Следующий код иллюстрирует исправленную ошибку:

int? i = null;
object o = i;
if (o == null)
    System.Console.WriteLine("Correct behaviour - runtime version from September 2005 or later");
else
    System.Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)");

При копировании в объекты официальные значения коробок выпуска из Nullable экземпляры, поэтому нулевые значения и нулевые ссылки считаются равными. Позднее появление этого исправления вызвало некоторые споры. [5] , поскольку это потребовало изменений ядра CLR , затронувших не только .NET2, но и все зависимые технологии (включая C#, VB, SQL Server 2005 и Visual Studio 2005).

Оператор объединения с нулем

[ редактировать ]

The ?? Оператор называется оператором объединения значений NULL и используется для определения значения по умолчанию для типов значений, допускающих значение NULL, а также для ссылочных типов. Он возвращает левый операнд, если он не равен нулю; в противном случае он возвращает правильный операнд. [6]

object nullObj = null; 
object obj = new Object(); 
return nullObj ?? obj; // returns obj

Основное использование этого оператора — присвоение типа, допускающего значение NULL, типу, не допускающему NULL, с помощью простого синтаксиса:

int? i = null;
int j = i ?? 0; // If i is not null, initialize j to i. Else (if i is null), initialize j to 0.
  1. ^ «Введение в дженерики C#» . Майкрософт . Январь 2005 года . Проверено 18 июня 2009 г.
  2. ^ "урожай" . Справочник по языку C# . Майкрософт . Проверено 26 апреля 2009 г.
  3. ^ «Анонимные методы (C#)» . Руководство по программированию на C# . Майкрософт . Проверено 18 июня 2009 г.
  4. ^ «Ковариантность и контравариантность в делегатах (C#)» . Руководство по программированию на C# . Майкрософт . Проверено 18 июня 2009 г.
  5. ^ Сомасегар (11 августа 2005 г.). «Нулевые значения больше не пропадают» . Веб-журнал Сомасегара . MSDN . Проверено 5 ноября 2008 г.
  6. ^ «?? Оператор» . Справочник по С# . Майкрософт . Проверено 23 ноября 2008 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a2743db4361c9130197735bc9f855f69__1702467060
URL1:https://arc.ask3.ru/arc/aa/a2/69/a2743db4361c9130197735bc9f855f69.html
Заголовок, (Title) документа по адресу, URL1:
C Sharp 2.0 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)