» » » Герберт Шилдт - C# 4.0: полное руководство


Авторские права

Герберт Шилдт - C# 4.0: полное руководство

Здесь можно скачать бесплатно "Герберт Шилдт - C# 4.0: полное руководство" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство ООО "И.Д. Вильямс", год 2011. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Герберт Шилдт - C# 4.0: полное руководство
Рейтинг:
Название:
C# 4.0: полное руководство
Издательство:
ООО "И.Д. Вильямс"
Год:
2011
ISBN:
978-5-8459-1684-6
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "C# 4.0: полное руководство"

Описание и краткое содержание "C# 4.0: полное руководство" читать бесплатно онлайн.



В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.


Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию






Рассмотрим для начала простой пример. В приведенной ниже программе объявляется необобщенный класс ArrayUtils, а в нем — статический обобщенный метод CopyInsert(). Этот метод копирует содержимое одного массива в другой, вводя по ходу дела новый элемент в указанном месте. Метод CopyInsert() можно использовать вместе с массивами любого типа.


// Продемонстрировать применение обобщенного метода,

using System;

// Класс обработки массивов. Этот класс не является обобщенным,

class ArrayUtils {

  // Копировать массив, вводя по ходу дела новый элемент.

  // Этот метод является обобщенным.

  public static bool CopyInsert<T>(T e, uint idx,

                   T[] src, T[] target) {

    // Проверить, насколько велик массив,

    if (target.Length < src.Length + 1) return false;


    // Скопировать содержимое массива src в целевой массив,

    // попутно введя значение е по индексу idx.

    for (int i = 0, j = 0; i < src.Length; i++, j++) {

      if (i == idx) {

        target[j] = e;

        j++;

      }

      target[j] = src[i];

    }

    return true;

  }

}


class GenMethDemo {

  static void Main() {

    int[] nums = { 1, 2, 3 };

    int[] nums2 = new int[4];


    // Вывести содержимое массива nums.

    Console.Write("Содержимое массива nums: ");

    foreach (int x in nums)

      Console.Write(x + " ");


    Console.WriteLine();


    // Обработать массив типа int.

    ArrayUtils.CopyInsert(99, 2, nums, nums2);


    // Вывести содержимое массива nums2.

    Console.Write("Содержимое массива nums2: ");

    foreach (int x in nums2)

      Console.Write(x + " ");


    Console.WriteLine();


    //А теперь обработать массив строк, используя метод copyInsert.

    string[] strs = { "Обобщения", "весьма", "эффективны." };

    string[] strs2 = new string[4];


    // Вывести содержимое массива strs.

    Console.Write("Содержимое массива strs: ");

    foreach (string s in strs)

      Console.Write(s + " ");


    Console.WriteLine();


    // Ввести элемент в массив строк.

    ArrayUtils.CopyInsert("в С#", 1, strs, strs2);


    // Вывести содержимое массива strs2.

    Console.Write("Содержимое массива strs2: ");

    foreach (string s in strs2)

      Console.Write(s + " ");


    Console.WriteLine();


    // Этот вызов недопустим, поскольку первый аргумент

    // относится к типу double, а третий и четвертый

    // аргументы обозначают элементы массивов типа int.

    // ArrayUtils.CopyInsert(0.01, 2, nums, nums2);

  }

}


Вот к какому результату приводит выполнение этой программы.


Содержимое массива nums: 1 2 3

Содержимое массива nums2: 1 2 99.3

Содержимое массива strs: Обобщения весьма эффективны.

Содержимое массива strs2: Обобщения в C# весьма эффективны.


Внимательно проанализируем метод CopyInsert(). Прежде всего обратите внимание на объявление этого метода в следующей строке кода.


public static bool CopyInsert<T>(Т e, uint idx,

         T[] src, T[] target) {


Параметр типа объявляется после имени метода, но перед списком его параметров. Обратите также внимание на то, что метод CopyInsert() является статическим, что позволяет вызывать его независимо от любого объекта. Следует, однако, иметь в виду, что обобщенные методы могут быть либо статическими, либо нестатическими. В этом отношении для них не существует никаких ограничений.

Далее обратите внимание на то, что метод CopyInsert() вызывается в методе Main() с помощью обычного синтаксиса и без указания аргументов типа. Дело в том, что типы аргументов различаются автоматически, а тип Т соответственно подстраивается. Этот процесс называется выводимостью типов. Например, в первом вызове данного метода


ArrayUtils.CopyInsert (99, 2, nums, nums2);


тип T становится типом int, поскольку числовое значение 99 и элементы массивов nums и nums2 относятся к типу int. А во втором вызове данного метода используются строковые типы, и поэтому тип Т заменяется типом string.

А теперь обратите внимание на приведенную ниже закомментированную строку кода.


// ArrayUtils.CopyInsert(0.01, 2, nums, nums2);


Если удалить символы комментария в начале этой строки кода и затем попытаться перекомпилировать программу, то будет получено сообщение об ошибке. Дело в том, что первый аргумент в данном вызове метода CopyInsert() относится к типу double, а третий и четвертый аргументы обозначают элементы массивов nums и nums2 типа int. Но все эти аргументы типа должны заменить один и тот же параметр типа Т, а это приведет к несоответствию типов и, как следствие, к ошибке во время компиляции. Подобная возможность соблюдать типовую безопасность относится к одним из самых главных преимуществ обобщенных методов.

Синтаксис объявления метода CopyInsert() может быть обобщен. Ниже приведена общая форма объявления обобщенного метода.


возвращаемый_ тип имя_метода<список_параметров_типа> (список_параметров) {// ...


В любом случае список_параметров_типа обозначает разделяемый запятой список параметров типа. Обратите внимание на то, что в объявлении обобщенного метода список параметров типа следует после имени метода.


Вызов обобщенного метода с явно указанными аргументами типа

В большинстве случаев неявной выводимости типов оказывается достаточно для вызова обобщенного метода, тем не менее аргументы типа могут быть указаны явным образом. Для этого достаточно указать аргументы типа после имени метода при его вызове. В качестве примера ниже приведена строка кода, в которой метод CopyInsert() вызывается с явно указываемым аргументом типа string.


ArrayUtils.CopyInsert<string>("В С#", 1, strs, strs2);


Тип передаваемых аргументов необходимо указывать явно в том случае, если компилятор не сможет вывести тип параметра Т или если требуется отменить выводимость типов.


Применение ограничений в обобщенных методах

На аргументы обобщенного метода можно наложить ограничения, указав их после списка параметров. В качестве примера ниже приведен вариант метода CopyInsert() для обработки данных только ссылочных типов.


public static bool CopyInsert<T>(Т e, uint idx,

           T[] src, T[] target) where T : class {


Если попробовать применить этот вариант в предыдущем примере программы обработки массивов, то приведенный ниже вызов метода CopyInsert () не будет скомпилирован, поскольку int является типом значения, а не ссылочным типом.


// Теперь неправильно, поскольку параметр Т должен быть ссылочного типа!

ArrayUtils.CopyInsert(99, 2, nums, nums2); // Теперь недопустимо!


Обобщенные делегаты

Как и методы, делегаты также могут быть обобщенными. Ниже приведена общая форма объявления обобщенного делегата.


delegate возвратцаемый_тип имя_делегата<список_параметров_типа> (список_аргументов) ;


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

В приведенном ниже примере программы демонстрируется применение делегата SomeOp с одним параметром типа Т. Этот делегат возвращает значение типа Т и принимает аргумент типа Т.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "C# 4.0: полное руководство"

Книги похожие на "C# 4.0: полное руководство" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Герберт Шилдт

Герберт Шилдт - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Герберт Шилдт - C# 4.0: полное руководство"

Отзывы читателей о книге "C# 4.0: полное руководство", комментарии и мнения людей о произведении.

  1. BOT20.02.2021, 13:02
    сКОРО КУПЛЮ
А что Вы думаете о книге? Оставьте Ваш отзыв.