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

Тут можно читать онлайн Герберт Шилдт - C# 4.0 полное руководство - 2011 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

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

C# 4.0 полное руководство - 2011 - описание и краткое содержание, автор Герберт Шилдт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

C# 4.0 полное руководство - 2011 - читать онлайн бесплатно полную версию (весь текст целиком)

C# 4.0 полное руководство - 2011 - читать книгу онлайн бесплатно, автор Герберт Шилдт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

public Test() {

// Следующий оператор годится только для ссылочных типов.

// obj = null; //не годится

// Следующий оператор годится только для типов значений.

// obj = 0; // не годится

II А этот оператор годится как для ссылочных типов,

// так и для типов значений, obj = default(Т); // Годится!

}

II ...

}

class DefaultDemo { static void Main() {

// Сконструировать объект класса Test, используя ссылочный тип.

Test х = new Test () ; 11

if(x.obj == null)

Console.WriteLine("Переменная x.obj имеет пустое значение .");

// Сконструировать объект класса Test, используя тип значения.

Test у = new Test();

if(у.obj == 0)

Console.WriteLine("Переменная у.obj имеет значение 0.");

}

}

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

Переменная x.obj имеет пустое значение .

Переменная у.obj имеет значение 0.

Обобщенные структуры

В C# разрешается создавать обобщенные структуры. Синтаксис для них такой же, как и для обобщенных классов. В качестве примера ниже приведена программа, в которой создается обобщенная структура XY для хранения координат X, Y.

// Продемонстрировать применение обобщенной структуры, using System;

// Эта структура является обобщенной, struct XY {

Т х;

Т у;

public XY(Т а, Т Ь) { х = а;

У = Ь;

}

public Т X {

get { return х; } set { х = value; }

}

public T Y {

get { return y; } set { у = value; }

}

}

class StructTest { static void Main() {

XY xy = new XY(10, 20);

XY xy2 = new XY(88.0, 99.0);

Console.WriteLine(xy.X + ", " + xy.Y);

Console.WriteLine(xy2.X + ", " + xy2.Y);

}

}

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

10, 20 88, 99

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

struct XY where Т : struct {

//...

Создание обобщенного метода

Как следует из приведенных выше примеров, в методах, объявляемых в обобщенных классах, может использоваться параметр типа из данного класса, а следовательно, такие методы автоматически становятся обобщенными по отношению к параметру типа. Но помимо этого имеется возможность объявить обобщенный метод со своими собственными параметрами типа и даже создать обобщенный метод, заключенный в необобщенном классе.

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

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

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

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

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

public static bool CopyInsert (Т 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(х + " ") ;

Console.WriteLine() ;

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

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

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

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

Console.Write(x + " ") ;

Console.WriteLine();

//А теперь обработать массив строк, используя метод copylnsert. string[] strs = {"Обобщения", "весьма", "эффективны."}; string[] strs2 = new string[4];

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

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

Console.Write(s + " ");

Console.WriteLine();

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

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

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

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

Console.Write(s + " ");

Console.WriteLine();

// Этот вызов недопустим, поскольку первый аргумент // относится к типу double, а третий и четвертый // аргументы обозначают элементы массивов типа int.

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

}

}

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

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

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

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

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

public static bool CopyInsert(Т e, uint idx,

T[] src, T[] target) {

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

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# 4.0 полное руководство - 2011 отзывы


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


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

Напишите свой комментарий
x