🗊Презентация Работа с массивами в C#

Нажмите для полного просмотра!
Работа с массивами в C#, слайд №1Работа с массивами в C#, слайд №2Работа с массивами в C#, слайд №3Работа с массивами в C#, слайд №4Работа с массивами в C#, слайд №5Работа с массивами в C#, слайд №6Работа с массивами в C#, слайд №7Работа с массивами в C#, слайд №8Работа с массивами в C#, слайд №9Работа с массивами в C#, слайд №10Работа с массивами в C#, слайд №11Работа с массивами в C#, слайд №12Работа с массивами в C#, слайд №13Работа с массивами в C#, слайд №14Работа с массивами в C#, слайд №15Работа с массивами в C#, слайд №16Работа с массивами в C#, слайд №17Работа с массивами в C#, слайд №18Работа с массивами в C#, слайд №19Работа с массивами в C#, слайд №20Работа с массивами в C#, слайд №21Работа с массивами в C#, слайд №22Работа с массивами в C#, слайд №23Работа с массивами в C#, слайд №24Работа с массивами в C#, слайд №25Работа с массивами в C#, слайд №26Работа с массивами в C#, слайд №27Работа с массивами в C#, слайд №28Работа с массивами в C#, слайд №29Работа с массивами в C#, слайд №30Работа с массивами в C#, слайд №31Работа с массивами в C#, слайд №32Работа с массивами в C#, слайд №33Работа с массивами в C#, слайд №34Работа с массивами в C#, слайд №35Работа с массивами в C#, слайд №36Работа с массивами в C#, слайд №37Работа с массивами в C#, слайд №38Работа с массивами в C#, слайд №39Работа с массивами в C#, слайд №40Работа с массивами в C#, слайд №41Работа с массивами в C#, слайд №42Работа с массивами в C#, слайд №43Работа с массивами в C#, слайд №44Работа с массивами в C#, слайд №45Работа с массивами в C#, слайд №46Работа с массивами в C#, слайд №47Работа с массивами в C#, слайд №48Работа с массивами в C#, слайд №49Работа с массивами в C#, слайд №50Работа с массивами в C#, слайд №51Работа с массивами в C#, слайд №52Работа с массивами в C#, слайд №53Работа с массивами в C#, слайд №54Работа с массивами в C#, слайд №55Работа с массивами в C#, слайд №56Работа с массивами в C#, слайд №57Работа с массивами в C#, слайд №58Работа с массивами в C#, слайд №59Работа с массивами в C#, слайд №60Работа с массивами в C#, слайд №61Работа с массивами в C#, слайд №62Работа с массивами в C#, слайд №63Работа с массивами в C#, слайд №64Работа с массивами в C#, слайд №65Работа с массивами в C#, слайд №66Работа с массивами в C#, слайд №67Работа с массивами в C#, слайд №68Работа с массивами в C#, слайд №69Работа с массивами в C#, слайд №70Работа с массивами в C#, слайд №71Работа с массивами в C#, слайд №72Работа с массивами в C#, слайд №73Работа с массивами в C#, слайд №74Работа с массивами в C#, слайд №75Работа с массивами в C#, слайд №76Работа с массивами в C#, слайд №77Работа с массивами в C#, слайд №78Работа с массивами в C#, слайд №79Работа с массивами в C#, слайд №80Работа с массивами в C#, слайд №81Работа с массивами в C#, слайд №82Работа с массивами в C#, слайд №83Работа с массивами в C#, слайд №84Работа с массивами в C#, слайд №85Работа с массивами в C#, слайд №86Работа с массивами в C#, слайд №87Работа с массивами в C#, слайд №88Работа с массивами в C#, слайд №89Работа с массивами в C#, слайд №90Работа с массивами в C#, слайд №91Работа с массивами в C#, слайд №92Работа с массивами в C#, слайд №93Работа с массивами в C#, слайд №94Работа с массивами в C#, слайд №95

Содержание

Вы можете ознакомиться и скачать презентацию на тему Работа с массивами в C#. Доклад-сообщение содержит 95 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Работа
с массивами 
в C#
Описание слайда:
Работа с массивами в C#

Слайд 2





Массивы в С#
Массивы в С# с точки зрения синтаксиса практически не отличаются от массивов в С, C++ и Java.
Однако внутренне массив в С# устроен как тип, производный от класса System.Array.
Формально массив определяется как набор элементов, доступ к которым производится с помощью числового индекса.
Описание слайда:
Массивы в С# Массивы в С# с точки зрения синтаксиса практически не отличаются от массивов в С, C++ и Java. Однако внутренне массив в С# устроен как тип, производный от класса System.Array. Формально массив определяется как набор элементов, доступ к которым производится с помощью числового индекса.

Слайд 3





Объявление массива
Массивы объявляются путем помещения квадратных скобок ([ ]) после указания типа данных для элементов этого массива.
Описание слайда:
Объявление массива Массивы объявляются путем помещения квадратных скобок ([ ]) после указания типа данных для элементов этого массива.

Слайд 4





	// Массив символьных строк с 10 //элементами {0, 1,…, 9}
	// Массив символьных строк с 10 //элементами {0, 1,…, 9}
	string[] booksOnCOM;
	booksOnCOM = new string[10];
	// Массив символьных строк с 2 //элементами {0, 1}
	string[] booksOnPLl = new string[2];
	// Массив символьных строк из 100 //элементов {О, 1,…, 99}
	string[] booksOnDotNet = new string[100];
Описание слайда:
// Массив символьных строк с 10 //элементами {0, 1,…, 9} // Массив символьных строк с 10 //элементами {0, 1,…, 9} string[] booksOnCOM; booksOnCOM = new string[10]; // Массив символьных строк с 2 //элементами {0, 1} string[] booksOnPLl = new string[2]; // Массив символьных строк из 100 //элементов {О, 1,…, 99} string[] booksOnDotNet = new string[100];

Слайд 5





	Такое объявление массива приведет к ошибке компилятора:
	Такое объявление массива приведет к ошибке компилятора:
	// При определении массива //фиксированного размера мы обязаны //использовать ключевое слово new
	int[4] ages = {30, 54, 4, 10};  // Ошибка!
   Pазмер массива задается при его создании, но не объявлении.
Описание слайда:
Такое объявление массива приведет к ошибке компилятора: Такое объявление массива приведет к ошибке компилятора: // При определении массива //фиксированного размера мы обязаны //использовать ключевое слово new int[4] ages = {30, 54, 4, 10}; // Ошибка! Pазмер массива задается при его создании, но не объявлении.

Слайд 6





	//Будет автоматически создан массив с //4 элементами. Обратите внимание на //отсутствие ключевого слова new 
	//Будет автоматически создан массив с //4 элементами. Обратите внимание на //отсутствие ключевого слова new 
	//и на пустые квадратные скобки
	int[] ages = {20, 22, 23, 0};
Описание слайда:
//Будет автоматически создан массив с //4 элементами. Обратите внимание на //отсутствие ключевого слова new //Будет автоматически создан массив с //4 элементами. Обратите внимание на //отсутствие ключевого слова new //и на пустые квадратные скобки int[] ages = {20, 22, 23, 0};

Слайд 7





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

Слайд 8





	// Используем последовательное //перечисление элементов массива:
	// Используем последовательное //перечисление элементов массива:
	string[] firstNames = new string[5] {“Steve”, “Gina”, “Swallow”, “Baldy”, “Gunner”};
	// Используем числовые индексы:
	string[] firstNames = new string[5];
	firstNames[0] = “Steve”;
	firstNames[1] = “Glna”;
	firstNames[2] = “Swallow”;
	firstNames[3] = “Baldy”;
	firstNames[4] = “Gunner”;
Описание слайда:
// Используем последовательное //перечисление элементов массива: // Используем последовательное //перечисление элементов массива: string[] firstNames = new string[5] {“Steve”, “Gina”, “Swallow”, “Baldy”, “Gunner”}; // Используем числовые индексы: string[] firstNames = new string[5]; firstNames[0] = “Steve”; firstNames[1] = “Glna”; firstNames[2] = “Swallow”; firstNames[3] = “Baldy”; firstNames[4] = “Gunner”;

Слайд 9





Важное различие между массивами C++ и С#
В С# элементам массива автоматически присваиваются значения по умолчанию в зависимости от используемого для них типа данных.
	Например, для массива целых чисел всем элементам будет изначально присвоено значение 0, для массива объектов — значение NULL и т. д.
Описание слайда:
Важное различие между массивами C++ и С# В С# элементам массива автоматически присваиваются значения по умолчанию в зависимости от используемого для них типа данных. Например, для массива целых чисел всем элементам будет изначально присвоено значение 0, для массива объектов — значение NULL и т. д.

Слайд 10





Многомерные массивы
Помимо массивов с одним измерением в С# поддерживаются также две основные разновидности многомерных массивов.
Первую разновидность многомерных массивов иногда называют “прямоугольным массивом”. Такой тип массива образуется простым сложением нескольких измерений. При этом все строки и столбцы в данном массиве будут одинаковой длины.
Описание слайда:
Многомерные массивы Помимо массивов с одним измерением в С# поддерживаются также две основные разновидности многомерных массивов. Первую разновидность многомерных массивов иногда называют “прямоугольным массивом”. Такой тип массива образуется простым сложением нескольких измерений. При этом все строки и столбцы в данном массиве будут одинаковой длины.

Слайд 11





	// Прямоугольный многомерный массив
	// Прямоугольный многомерный массив
	int[] myMatrix;
	myMatrix = new int[6, 6];
	// Заполняем массив 6 на 6
	for (int i = 0; i < 6; i++)
		for (int j = 0; j < 6; j++)
			myMatrix[i, j] = i*j;
	// Выводим элементы многомерного массива на //системную консоль
	for (int i = 0 ; i < 6; i++)
	{
		for (int j = 0; j < 6; j++)
		{
			Console.Write(myMatrix[i, j] +"\t");
		}
		Console. WriteLine();
	}
Описание слайда:
// Прямоугольный многомерный массив // Прямоугольный многомерный массив int[] myMatrix; myMatrix = new int[6, 6]; // Заполняем массив 6 на 6 for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) myMatrix[i, j] = i*j; // Выводим элементы многомерного массива на //системную консоль for (int i = 0 ; i < 6; i++) { for (int j = 0; j < 6; j++) { Console.Write(myMatrix[i, j] +"\t"); } Console. WriteLine(); }

Слайд 12





Результат работы программы
Описание слайда:
Результат работы программы

Слайд 13





Второй тип многомерного массива можно назвать “ломаным” (jagged). Такой массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер.
Второй тип многомерного массива можно назвать “ломаным” (jagged). Такой массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер.
Описание слайда:
Второй тип многомерного массива можно назвать “ломаным” (jagged). Такой массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер. Второй тип многомерного массива можно назвать “ломаным” (jagged). Такой массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер.

Слайд 14





	// "Ломаный" многомерный массив (массив из // массивов). В нашем случае - это массив
	// "Ломаный" многомерный массив (массив из // массивов). В нашем случае - это массив
	// из пяти внутренних массивов разного  
	// размера
	int[][] myJagArray = new int[5][]:
	// Создаем "ломаный" массив
	for (int i = 0; i < myJagArray. Length; i++)
	{
	myJagArray[i] = new int[i + 7];
	}
Описание слайда:
// "Ломаный" многомерный массив (массив из // массивов). В нашем случае - это массив // "Ломаный" многомерный массив (массив из // массивов). В нашем случае - это массив // из пяти внутренних массивов разного // размера int[][] myJagArray = new int[5][]: // Создаем "ломаный" массив for (int i = 0; i < myJagArray. Length; i++) { myJagArray[i] = new int[i + 7]; }

Слайд 15





	// Выводим каждую строку на системную консоль (как //мы помним, каждому элементу
	// Выводим каждую строку на системную консоль (как //мы помним, каждому элементу
   // присваивается значение по умолчанию - в нашем
   //случае 0)
	for (int i = 0; i < 5; i++)
	{
		Console.Write(“Length of row {0} is {1}:\t”, i, 	myJagArray[i].Length);
		for (int j = 0; j < myJagArray[i].Length; j++)
		{
		    Console.Write(myJagArray[i][j] + " ");
		}
		Console.WriteLine();
	}
Описание слайда:
// Выводим каждую строку на системную консоль (как //мы помним, каждому элементу // Выводим каждую строку на системную консоль (как //мы помним, каждому элементу // присваивается значение по умолчанию - в нашем //случае 0) for (int i = 0; i < 5; i++) { Console.Write(“Length of row {0} is {1}:\t”, i, myJagArray[i].Length); for (int j = 0; j < myJagArray[i].Length; j++) { Console.Write(myJagArray[i][j] + " "); } Console.WriteLine(); }

Слайд 16





Результат работы программы
Описание слайда:
Результат работы программы

Слайд 17





Базовый класс System.Array
Все наиболее важные различия между массивами в C++ и С# происходят оттого,
	что в С# все массивы являются производными от базового класса System. Array. За счет этого любой массив в С# наследует большое количество полезных методов и свойств, которые сильно упрощают работу программиста.
Описание слайда:
Базовый класс System.Array Все наиболее важные различия между массивами в C++ и С# происходят оттого, что в С# все массивы являются производными от базового класса System. Array. За счет этого любой массив в С# наследует большое количество полезных методов и свойств, которые сильно упрощают работу программиста.

Слайд 18





Таблица
Член класса 	  Назначение
BinarySearch()	   Этот статический метод 				   можно использовать только 			   тогда, когда массив реали-
				   зует интерфейс IComparer, в 			   этом случае метод позволяет 
				   найти элемент массива.	
Clear()		   Этот статический метод 				   позволяет очистить диапазон
Описание слайда:
Таблица Член класса Назначение BinarySearch() Этот статический метод можно использовать только тогда, когда массив реали- зует интерфейс IComparer, в этом случае метод позволяет найти элемент массива. Clear() Этот статический метод позволяет очистить диапазон

Слайд 19





				   элементов (числовые 				   элементы приобретут 				   значения 0, а ссылки на 
				   элементов (числовые 				   элементы приобретут 				   значения 0, а ссылки на 
				   на объекты – null)
CopyTo() 	   	   Используется для 					   копирования элементов из 			   исходного массива в массив
   				   назначения
GetEnumerato()	   Возвращает интерфейс 				   IEnumerator для указанного 			   массива.
Описание слайда:
элементов (числовые элементы приобретут значения 0, а ссылки на элементов (числовые элементы приобретут значения 0, а ссылки на на объекты – null) CopyTo() Используется для копирования элементов из исходного массива в массив назначения GetEnumerato() Возвращает интерфейс IEnumerator для указанного массива.

Слайд 20





GetLengt().Lenght   Метод GetLength() 					    используется для 					    определения количества 			    элементов в указанном 				    измерении массива. Length -        			    это свойство только для 	    				    чтения, с помощью которого 		   	    можно получить количество 			    элементов массива
GetLengt().Lenght   Метод GetLength() 					    используется для 					    определения количества 			    элементов в указанном 				    измерении массива. Length -        			    это свойство только для 	    				    чтения, с помощью которого 		   	    можно получить количество 			    элементов массива
GetLowerBound()    Эти методы используются 
GetUpperBound()    для определения верхней 
				    и нижней границы
Описание слайда:
GetLengt().Lenght Метод GetLength() используется для определения количества элементов в указанном измерении массива. Length - это свойство только для чтения, с помощью которого можно получить количество элементов массива GetLengt().Lenght Метод GetLength() используется для определения количества элементов в указанном измерении массива. Length - это свойство только для чтения, с помощью которого можно получить количество элементов массива GetLowerBound() Эти методы используются GetUpperBound() для определения верхней и нижней границы

Слайд 21





				    выбранного вами измерения 			    массива.
				    выбранного вами измерения 			    массива.
GetValue()		    Возвращает или 	
SetValue()		    устанавливает значение 			    указанного индекса для 				    массива.
				    Этот метод перегружен для 			    нормальной работы как с 			    одномерными, так и с 				    многомерными массивами
Reverse()		    Этот статический метод 				    позволяет расставить
Описание слайда:
выбранного вами измерения массива. выбранного вами измерения массива. GetValue() Возвращает или SetValue() устанавливает значение указанного индекса для массива. Этот метод перегружен для нормальной работы как с одномерными, так и с многомерными массивами Reverse() Этот статический метод позволяет расставить

Слайд 22





			           элементы одномерного 			           массива в обратном порядке.
			           элементы одномерного 			           массива в обратном порядке.
Sort()			   Сортирует одномерный 				   массив встроенных типов 			   данных. Если элементы
				   массива поддерживают 				   интерфейс IComparer, то с 			   помощью этого метода вы 			   сможете производить 				   сортировку и ваших 				   пользовательских типов
				   данных.
Описание слайда:
элементы одномерного массива в обратном порядке. элементы одномерного массива в обратном порядке. Sort() Сортирует одномерный массив встроенных типов данных. Если элементы массива поддерживают интерфейс IComparer, то с помощью этого метода вы сможете производить сортировку и ваших пользовательских типов данных.

Слайд 23





Пример
// Создаем несколько массивов символьных
// строк и экспериментируем с членами
// System.Array
class Arrays
{
public static int Main(string[] args)
	{
	// Массив символьных строк
	string[] firstNames - new string[5]
	{“Steve”, “Gina”, “Swallow”, “Baldy”, “Gunner”}
Описание слайда:
Пример // Создаем несколько массивов символьных // строк и экспериментируем с членами // System.Array class Arrays { public static int Main(string[] args) { // Массив символьных строк string[] firstNames - new string[5] {“Steve”, “Gina”, “Swallow”, “Baldy”, “Gunner”}

Слайд 24





// Выводим имена в соответствии с порядком
// Выводим имена в соответствии с порядком
// элементов в массиве
	Console. WriteLine(“Here is the array:”);
	for (int i = 0; i < firstNames. Length; i++)
		Console. Write(firstNames[i] + "\t");
// Расставляем элементы в обратном порядке
//при помощи статического
// метода Reverse()
Описание слайда:
// Выводим имена в соответствии с порядком // Выводим имена в соответствии с порядком // элементов в массиве Console. WriteLine(“Here is the array:”); for (int i = 0; i < firstNames. Length; i++) Console. Write(firstNames[i] + "\t"); // Расставляем элементы в обратном порядке //при помощи статического // метода Reverse()

Слайд 25





	Array.Reverse(firstNames );
	Array.Reverse(firstNames );
// ...и снова выводим имена
	Console. WriteLine(“Here is the array once reversed:”);
	for (int i = 0; i < firstNames.Length; i++)
		Console. Write(firstNames[i] + “\t”);
// А теперь вычищаем всех, кроне юного
// Гуннара
	Console.WriteLine(“Cleared out all but one...”);
	Array. Clear(firstNames. 1, 4);
Описание слайда:
Array.Reverse(firstNames ); Array.Reverse(firstNames ); // ...и снова выводим имена Console. WriteLine(“Here is the array once reversed:”); for (int i = 0; i < firstNames.Length; i++) Console. Write(firstNames[i] + “\t”); // А теперь вычищаем всех, кроне юного // Гуннара Console.WriteLine(“Cleared out all but one...”); Array. Clear(firstNames. 1, 4);

Слайд 26





	for (int i = 0; i < firstNames. Length: i++)
	for (int i = 0; i < firstNames. Length: i++)
	{
		Console. Write(firstNames[i] + "\t\n");
	}
	return 0;
	}
}
Описание слайда:
for (int i = 0; i < firstNames. Length: i++) for (int i = 0; i < firstNames. Length: i++) { Console. Write(firstNames[i] + "\t\n"); } return 0; } }

Слайд 27





Результат программы
Описание слайда:
Результат программы

Слайд 28





Работа 
со строками
в С#
Описание слайда:
Работа со строками в С#

Слайд 29





Строки в С#
String (строки Unicode) — это встроенный тип данных С#.
Все строки в мире С# и .NET происходят от единственного базового класса — System.String.
System.String обеспечивает множество методов, которые призваны выполнить за вас всю черновую работу: возвратить количество символов в строке, найти подстроки, преобразовать все символы в строчные или прописные и т. д.
Описание слайда:
Строки в С# String (строки Unicode) — это встроенный тип данных С#. Все строки в мире С# и .NET происходят от единственного базового класса — System.String. System.String обеспечивает множество методов, которые призваны выполнить за вас всю черновую работу: возвратить количество символов в строке, найти подстроки, преобразовать все символы в строчные или прописные и т. д.

Слайд 30





Таблица
Член класса 	 Назначение
Length              	  Это свойство возвращает 			   	  длину указанной строки.
Concat()		  Этот статический метод 				  класса String возвращает 				  новую строку, “склеенную” из 			  двух исходных.
CompareTo() 	  Сравнивает две строки.
Описание слайда:
Таблица Член класса Назначение Length Это свойство возвращает длину указанной строки. Concat() Этот статический метод класса String возвращает новую строку, “склеенную” из двух исходных. CompareTo() Сравнивает две строки.

Слайд 31





Сору() 	      Этот статический метод создает 		      новую копию существующей 		      строки
Сору() 	      Этот статический метод создает 		      новую копию существующей 		      строки
Format() 	      Используется для 				      форматирования строки с 			      использованием других
			      примитивов (числовых данных, 		      других строк) и подстановочных
			      выражений вида {0}.
Insert()	      Используется для вставки строки 		      внутрь существующей.
Описание слайда:
Сору() Этот статический метод создает новую копию существующей строки Сору() Этот статический метод создает новую копию существующей строки Format() Используется для форматирования строки с использованием других примитивов (числовых данных, других строк) и подстановочных выражений вида {0}. Insert() Используется для вставки строки внутрь существующей.

Слайд 32





PadLeft() 	    Эти методы позволяют заполнить
PadLeft() 	    Эти методы позволяют заполнить
PadRight() 	    (“набить”) строку указанными
			    символами.
Remove() 	    Эти методы позволяют создать
Replace()       копию строки с внесенными 
			    изменениями (удаленными или
	 		    замененными символами)
ToUpper()      Эти методы используются для
ToLower()      получения копии строки, в   
   			    которой все символы станут
 			    строчными или прописными.
Описание слайда:
PadLeft() Эти методы позволяют заполнить PadLeft() Эти методы позволяют заполнить PadRight() (“набить”) строку указанными символами. Remove() Эти методы позволяют создать Replace() копию строки с внесенными изменениями (удаленными или замененными символами) ToUpper() Эти методы используются для ToLower() получения копии строки, в которой все символы станут строчными или прописными.

Слайд 33





Обратить внимание
 Хотя string — это ссылочный тип данных, при использовании операторов равенства (== и !=) происходит сравнение значений строковых объектов, а не адресов этих объектов в оперативной памяти.
Оператор сложения (+) в С# перегружен таким образом, что при применении к строковым объектам он вызывает метод Concat().
Описание слайда:
Обратить внимание Хотя string — это ссылочный тип данных, при использовании операторов равенства (== и !=) происходит сравнение значений строковых объектов, а не адресов этих объектов в оперативной памяти. Оператор сложения (+) в С# перегружен таким образом, что при применении к строковым объектам он вызывает метод Concat().

Слайд 34





Управляющие последоватльности
В С#, как и в С, и в C++, и в Java строки могут содержать любое количество управляющих последовательностей (escape characters).
Описание слайда:
Управляющие последоватльности В С#, как и в С, и в C++, и в Java строки могут содержать любое количество управляющих последовательностей (escape characters).

Слайд 35





Пример
// Применение управляющих
//последовательностей - \t, \\, \n и прочих
string anotherString;
anotherString = “Every programming book need \“Hello World\””;
Console.WriteLine("\t" + anotherString);
anotherString = “c:\\CSharpProjects\\Strings\\string.cs”;
Console.WriteLine(“\t” + anotherString);
Описание слайда:
Пример // Применение управляющих //последовательностей - \t, \\, \n и прочих string anotherString; anotherString = “Every programming book need \“Hello World\””; Console.WriteLine("\t" + anotherString); anotherString = “c:\\CSharpProjects\\Strings\\string.cs”; Console.WriteLine(“\t” + anotherString);

Слайд 36





Таблица
Управляющие  Назначение
посл-ти     
\				     Вставить одинарную 				     кавычку в строку
\”				     Вставить двойную 				     кавычку в строку
\\				     Вставить в строку 					     обратный слэш. Особенно 			     полезно при работе с 				     путями в файловой 				     системе.
Описание слайда:
Таблица Управляющие Назначение посл-ти \ Вставить одинарную кавычку в строку \” Вставить двойную кавычку в строку \\ Вставить в строку обратный слэш. Особенно полезно при работе с путями в файловой системе.

Слайд 37





\a				Запустить системное 					оповещение (Alert).
\a				Запустить системное 					оповещение (Alert).
\b				Вернуться на одну позицию 			(Backspace).
\f				Начать следующую страницу 			(Form feed).
\n				Вставить новую строку (New 			line).
\r				Вставить возврат каретки 				(carnage Return).
\t				Вставить горизонтальный 				символ табуляции (horizontal 			Tab).
Описание слайда:
\a Запустить системное оповещение (Alert). \a Запустить системное оповещение (Alert). \b Вернуться на одну позицию (Backspace). \f Начать следующую страницу (Form feed). \n Вставить новую строку (New line). \r Вставить возврат каретки (carnage Return). \t Вставить горизонтальный символ табуляции (horizontal Tab).

Слайд 38





\u				Вставить символ Unicode.
\u				Вставить символ Unicode.
\v				Вставить вертикальный символ 			табуляции (Vertical tab).
\0			Представляет пустой символ 			(NULL)
Описание слайда:
\u Вставить символ Unicode. \u Вставить символ Unicode. \v Вставить вертикальный символ табуляции (Vertical tab). \0 Представляет пустой символ (NULL)

Слайд 39





Вывод служебных символов
Помимо управляющих последовательностей, в С# предусмотрен также специальный префикс @ для дословного вывода строк вне зависимости от наличия в них управляющих последовательностей. Строки с этим префиксом называются “дословными” (verbatim strings). Это — очень удобное средство во многих ситуациях:
	// Префикс @ отключает обработку 
	// управляющих последовательностей
	string finalString - @"\n\tString file: 'C:\CSnarpProjects\Strings\string.cs'";
	Console.WriteLine(finalString);
Описание слайда:
Вывод служебных символов Помимо управляющих последовательностей, в С# предусмотрен также специальный префикс @ для дословного вывода строк вне зависимости от наличия в них управляющих последовательностей. Строки с этим префиксом называются “дословными” (verbatim strings). Это — очень удобное средство во многих ситуациях: // Префикс @ отключает обработку // управляющих последовательностей string finalString - @"\n\tString file: 'C:\CSnarpProjects\Strings\string.cs'"; Console.WriteLine(finalString);

Слайд 40





Применение System.Text.StringBuilder
При работе со строками в С# необходимо помнить очень важную вещь: значение строки не может быть изменено.
Все методы, казалось бы, изменяющие строку, на самом деле лишь возвращают её измененную копию.
Описание слайда:
Применение System.Text.StringBuilder При работе со строками в С# необходимо помнить очень важную вещь: значение строки не может быть изменено. Все методы, казалось бы, изменяющие строку, на самом деле лишь возвращают её измененную копию.

Слайд 41





Пример
// Вносим изменения в строку? На самом деле 
// нет...
System.String strFixed = "This is how I began life";
Console.WriteLine(strFixed);
string upperVersion = strFixed.ToUpper(); 
// Возвращает "прописную" копию strFixed
Console.WriteLine(strFixed);
Console.WriteLine(upperVersion);
Описание слайда:
Пример // Вносим изменения в строку? На самом деле // нет... System.String strFixed = "This is how I began life"; Console.WriteLine(strFixed); string upperVersion = strFixed.ToUpper(); // Возвращает "прописную" копию strFixed Console.WriteLine(strFixed); Console.WriteLine(upperVersion);

Слайд 42





Работа с копиями копий может надоесть. Поэтому в С# существует класс, позволяющий изменять строки напрямую – это класс StringBuilder, определенный в пространстве имен System.Text. Он во многом напоминает CString в MFC. 
Работа с копиями копий может надоесть. Поэтому в С# существует класс, позволяющий изменять строки напрямую – это класс StringBuilder, определенный в пространстве имен System.Text. Он во многом напоминает CString в MFC. 
Все изменения, которые вы вносите в объект этого класса, немедленно в нем отражаются, что во многих ситуациях гораздо эффективнее, чем работать с множеством копий.
Описание слайда:
Работа с копиями копий может надоесть. Поэтому в С# существует класс, позволяющий изменять строки напрямую – это класс StringBuilder, определенный в пространстве имен System.Text. Он во многом напоминает CString в MFC. Работа с копиями копий может надоесть. Поэтому в С# существует класс, позволяющий изменять строки напрямую – это класс StringBuilder, определенный в пространстве имен System.Text. Он во многом напоминает CString в MFC. Все изменения, которые вы вносите в объект этого класса, немедленно в нем отражаются, что во многих ситуациях гораздо эффективнее, чем работать с множеством копий.

Слайд 43





// Демонстрирует применение класса StringBullder
// Демонстрирует применение класса StringBullder
using System;
using System.Text; // Здесь живет StringBuilder!
class StringApp
{
	public static int Main(stnng[] args)
	{
		// Создаем объект StringBuilder и изменяем его
		//содержимое
		StringBuilder myBuffer = new StringBuilder(“I am a 	buffer”);
		myBuffer.Append(“ that just got longer...”);
		Console.WriteLine(myBuffer );
		return 0; 
	} 
}
Описание слайда:
// Демонстрирует применение класса StringBullder // Демонстрирует применение класса StringBullder using System; using System.Text; // Здесь живет StringBuilder! class StringApp { public static int Main(stnng[] args) { // Создаем объект StringBuilder и изменяем его //содержимое StringBuilder myBuffer = new StringBuilder(“I am a buffer”); myBuffer.Append(“ that just got longer...”); Console.WriteLine(myBuffer ); return 0; } }

Слайд 44





Помимо добавления класс StringBuilder допускает и другие операции, например удаление определенных символов или их замену. 
Помимо добавления класс StringBuilder допускает и другие операции, например удаление определенных символов или их замену. 
После того как вы добились нужного вам результата, часто бывает удобным вызвать метод ToString( ), чтобы перевести содержимое объекта StringBuilder в обычный тип данных String.
Описание слайда:
Помимо добавления класс StringBuilder допускает и другие операции, например удаление определенных символов или их замену. Помимо добавления класс StringBuilder допускает и другие операции, например удаление определенных символов или их замену. После того как вы добились нужного вам результата, часто бывает удобным вызвать метод ToString( ), чтобы перевести содержимое объекта StringBuilder в обычный тип данных String.

Слайд 45





using System;
using System;
using System.Text; 
class StringApp
{
public static int Main(string[] args)
{
	StringBuilder myBuffer = new StringBuilder(“I am a buffer”);
	myBuffer.Append(" that just got longer...");
	Console.WriteLine(myBuffer) ;
	myBuffer.Append(“and even longer.”);
	Console. WriteLine(myBuffer);
	// Делаем все буквы прописными
	string theReallyFinalString = myBuffer.ToString(). ToUpper();
	Console.WriteLine(theReallyFinalString);
	return 0; } }
Описание слайда:
using System; using System; using System.Text; class StringApp { public static int Main(string[] args) { StringBuilder myBuffer = new StringBuilder(“I am a buffer”); myBuffer.Append(" that just got longer..."); Console.WriteLine(myBuffer) ; myBuffer.Append(“and even longer.”); Console. WriteLine(myBuffer); // Делаем все буквы прописными string theReallyFinalString = myBuffer.ToString(). ToUpper(); Console.WriteLine(theReallyFinalString); return 0; } }

Слайд 46





Перечисления 
в С#
Описание слайда:
Перечисления в С#

Слайд 47





Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения.
Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения.
	// Создаем перечисление
	enum EmpType
	{
	Manager, 	// = О
	Grunt, 		// = 1
	Contractor, 	// = 2
	VP 			// = 3
	}
Описание слайда:
Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения. Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения. // Создаем перечисление enum EmpType { Manager, // = О Grunt, // = 1 Contractor, // = 2 VP // = 3 }

Слайд 48





// Элементы перечисления могут иметь
// Элементы перечисления могут иметь
// произвольные числовые значения
	enum EmpType
	{
	Manager = 10,
	Grunt = 1,
	Contractor = 100,
	VP = 99
	}
Описание слайда:
// Элементы перечисления могут иметь // Элементы перечисления могут иметь // произвольные числовые значения enum EmpType { Manager = 10, Grunt = 1, Contractor = 100, VP = 99 }

Слайд 49





При компиляции, компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. 
При компиляции, компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. 
По умолчанию для этих числовых значений компилятор использует тип данных Int. Однако ничто не мешает явным образом объявить компилятору, что следует использовать другой тип данных, например, byte.
Описание слайда:
При компиляции, компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. При компиляции, компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. По умолчанию для этих числовых значений компилятор использует тип данных Int. Однако ничто не мешает явным образом объявить компилятору, что следует использовать другой тип данных, например, byte.

Слайд 50





// Вместо элементов перечисления будут 
// Вместо элементов перечисления будут 
// подставляться числовые значения типа byte
enum EmpType : byte
{
	Manager = 10,
	Grunt = 1,
	Contractor = 100,
	VP = 9
}
Точно таким же образом можно использовать любой из основных целочисленных типов данных С#(byte, sbyte, short, ushort, int, uint, long, ulong).
Описание слайда:
// Вместо элементов перечисления будут // Вместо элементов перечисления будут // подставляться числовые значения типа byte enum EmpType : byte { Manager = 10, Grunt = 1, Contractor = 100, VP = 9 } Точно таким же образом можно использовать любой из основных целочисленных типов данных С#(byte, sbyte, short, ushort, int, uint, long, ulong).

Слайд 51





Базовый класс System.Enum
Все перечисления в С# происходят от единого базового класса System.Enum. Конечно же, в этом базовом классе предусмотрены методы, которые могут существенно облегчить работу с перечислениями.
Описание слайда:
Базовый класс System.Enum Все перечисления в С# происходят от единого базового класса System.Enum. Конечно же, в этом базовом классе предусмотрены методы, которые могут существенно облегчить работу с перечислениями.

Слайд 52





GetUnderlyingType ( )
Это статический метод, который позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления:
	// Получаем тип числовых данных
   // перечисления (в нашем примере это будет
	// System. Byte)
	Console.WriteLine(Enum. GetUnderlyingType(typeof(EmpType)));
Описание слайда:
GetUnderlyingType ( ) Это статический метод, который позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления: // Получаем тип числовых данных // перечисления (в нашем примере это будет // System. Byte) Console.WriteLine(Enum. GetUnderlyingType(typeof(EmpType)));

Слайд 53





Enum.Format ( )
Статический метод, который может получать значимые имена элементов перечисления по их числовым значениям.
В нашем примере переменной типа EmpType соответствовало имя элемента перечисления Contractor (то есть эта переменная разрешалась в числовое значение 100). 
Для того чтобы узнать, какому элементу переменной соответствует это числовое значение, необходимо вызвать метод Enum.Format, указать тип перечисления
Описание слайда:
Enum.Format ( ) Статический метод, который может получать значимые имена элементов перечисления по их числовым значениям. В нашем примере переменной типа EmpType соответствовало имя элемента перечисления Contractor (то есть эта переменная разрешалась в числовое значение 100). Для того чтобы узнать, какому элементу переменной соответствует это числовое значение, необходимо вызвать метод Enum.Format, указать тип перечисления

Слайд 54





числовое значение (в нашем случае
числовое значение (в нашем случае
через переменную) и флаг
форматирования (в нашем случае — G,
что означает вывести как тип string)
// Этот код должен вывести на системную
// консоль строку "You are a Contractor
EmpType fred;
fred = EmpType.Contractor;
Console.WriteLine(“You are a {0}”, Enum. Format (typeof( EmpType), fred, "G"));
Описание слайда:
числовое значение (в нашем случае числовое значение (в нашем случае через переменную) и флаг форматирования (в нашем случае — G, что означает вывести как тип string) // Этот код должен вывести на системную // консоль строку "You are a Contractor EmpType fred; fred = EmpType.Contractor; Console.WriteLine(“You are a {0}”, Enum. Format (typeof( EmpType), fred, "G"));

Слайд 55





GetValues()
Статический метод, который возвращает экземпляр System.Array, при этом каждому элементу массива будет соответствовать член указанного перечисления.
	// Получаем информацию о количестве
	// элементов в перечислении
	Array obj = Enum.GetValues(typeof(EmpType));
	Console. WriteLine(“This enum has {0} members.”, obj.Length);
Описание слайда:
GetValues() Статический метод, который возвращает экземпляр System.Array, при этом каждому элементу массива будет соответствовать член указанного перечисления. // Получаем информацию о количестве // элементов в перечислении Array obj = Enum.GetValues(typeof(EmpType)); Console. WriteLine(“This enum has {0} members.”, obj.Length);

Слайд 56





// А теперь выводим имена элементов
// А теперь выводим имена элементов
// перечисления в формате string и
// соответствующие им числовые значения
foreach(EmpType e in obj)
{
	Console. Write("String name: {0}“, Enum. Format (typeof (EmpType), e, "G"));
	Console. Write(" ({0})“, Enum. Format(typeof( EmpType), e, "D"));
	Console. Write(" hex: {0}\n“, Enum. Format ( typeof (EmpType), e, "X"));
}
Описание слайда:
// А теперь выводим имена элементов // А теперь выводим имена элементов // перечисления в формате string и // соответствующие им числовые значения foreach(EmpType e in obj) { Console. Write("String name: {0}“, Enum. Format (typeof (EmpType), e, "G")); Console. Write(" ({0})“, Enum. Format(typeof( EmpType), e, "D")); Console. Write(" hex: {0}\n“, Enum. Format ( typeof (EmpType), e, "X")); }

Слайд 57





Результат работы программы
Описание слайда:
Результат работы программы

Слайд 58





IsDefined
Свойство класса System.Enum, которое позволяет определить, является ли выбранная вами символьная строка элементом указанного перечисления.
Например, предположим, что требуется узнать, является ли значение Salesperson элементом перечисления EmpType.
Описание слайда:
IsDefined Свойство класса System.Enum, которое позволяет определить, является ли выбранная вами символьная строка элементом указанного перечисления. Например, предположим, что требуется узнать, является ли значение Salesperson элементом перечисления EmpType.

Слайд 59





// Есть ли в EmpType элемент 
// Есть ли в EmpType элемент 
// Salesperson?
if (Enum. IsDefined(typeof (EmpType). "Salesperson"))
	Console. WrlteLine(“Yes, we have sales people.”);
else
	Console. WriteLine(“No, we have no profits...”);
Описание слайда:
// Есть ли в EmpType элемент // Есть ли в EmpType элемент // Salesperson? if (Enum. IsDefined(typeof (EmpType). "Salesperson")) Console. WrlteLine(“Yes, we have sales people.”); else Console. WriteLine(“No, we have no profits...”);

Слайд 60





Перечисления С# поддерживают работу с большим количеством перегруженных операторов, которые могут выполнять различные операции с числовыми значениями переменных.
Перечисления С# поддерживают работу с большим количеством перегруженных операторов, которые могут выполнять различные операции с числовыми значениями переменных.
	// Какому из этих двух переменных-членов
	// перечисления соответствует большее числовое
	// значение?
	EmpType Joe = EmpType. VP:
	EmpType Fran = EmpType. Grunt;
	if (Joe < Fran)
		Console. WrlteLine(“Joe's value is less than Fran's”);
	else
		Console. WnteLine(“Fran's value is less than Joe's”);
Описание слайда:
Перечисления С# поддерживают работу с большим количеством перегруженных операторов, которые могут выполнять различные операции с числовыми значениями переменных. Перечисления С# поддерживают работу с большим количеством перегруженных операторов, которые могут выполнять различные операции с числовыми значениями переменных. // Какому из этих двух переменных-членов // перечисления соответствует большее числовое // значение? EmpType Joe = EmpType. VP: EmpType Fran = EmpType. Grunt; if (Joe < Fran) Console. WrlteLine(“Joe's value is less than Fran's”); else Console. WnteLine(“Fran's value is less than Joe's”);

Слайд 61





Структуры в С#
Описание слайда:
Структуры в С#

Слайд 62





Определение структур в С#
Cтруктуры С# можно рассматривать как некую особую разновидность классов.
Для структур можно определять конструкторы (только принимающие параметры).
Структуры могут реализовывать интерфейсы.
Описание слайда:
Определение структур в С# Cтруктуры С# можно рассматривать как некую особую разновидность классов. Для структур можно определять конструкторы (только принимающие параметры). Структуры могут реализовывать интерфейсы.

Слайд 63





Структуры могут содержать любое количество внутренних членов.
Структуры могут содержать любое количество внутренних членов.
Для структур С# не существует единого базового класса (тип System.Structure в С# не предусмотрен).
Косвенно все структуры являются производными от типа ValueType.
Описание слайда:
Структуры могут содержать любое количество внутренних членов. Структуры могут содержать любое количество внутренних членов. Для структур С# не существует единого базового класса (тип System.Structure в С# не предусмотрен). Косвенно все структуры являются производными от типа ValueType.

Слайд 64





Пример
// Вначале нам потребуется наше
// перечисление
enum EmpType : byte
{
	Manager = 10, Grunt = 1, Contractor = 100, 
	VP = 9
}
struct EMPLOYEE
{
Описание слайда:
Пример // Вначале нам потребуется наше // перечисление enum EmpType : byte { Manager = 10, Grunt = 1, Contractor = 100, VP = 9 } struct EMPLOYEE {

Слайд 65





		public EmpType title; // Одно из полей структуры - 	// перечисление, определенное выше
		public EmpType title; // Одно из полей структуры - 	// перечисление, определенное выше
		public string name;
		public short deptID;
	}
	class StructTester
	{
		public static int Main(string[] args)
		{
			// Создаем и присваиваем значения Фреду
			EMPLOYEE fred;
			fred.deptID = 40;
			fred.name = "Fred";
			fred.title = EmpType.Grunt;
			return 0;
		}
	}
Описание слайда:
public EmpType title; // Одно из полей структуры - // перечисление, определенное выше public EmpType title; // Одно из полей структуры - // перечисление, определенное выше public string name; public short deptID; } class StructTester { public static int Main(string[] args) { // Создаем и присваиваем значения Фреду EMPLOYEE fred; fred.deptID = 40; fred.name = "Fred"; fred.title = EmpType.Grunt; return 0; } }

Слайд 66





Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры придется определить свой собственный конструктор или несколько конструкторов.
Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры придется определить свой собственный конструктор или несколько конструкторов.
Нужно помнить, что нельзя переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров.
Описание слайда:
Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры придется определить свой собственный конструктор или несколько конструкторов. Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры придется определить свой собственный конструктор или несколько конструкторов. Нужно помнить, что нельзя переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров.

Слайд 67





Все ваши конструкторы обязательно должны принимать один или несколько параметров.
Все ваши конструкторы обязательно должны принимать один или несколько параметров.
	// Для структур можно определить
	// конструкторы, но все они должны
	// принимать параметры
	struct EMPLOYEE
	{
	// Поля
	public EmpType title;
Описание слайда:
Все ваши конструкторы обязательно должны принимать один или несколько параметров. Все ваши конструкторы обязательно должны принимать один или несколько параметров. // Для структур можно определить // конструкторы, но все они должны // принимать параметры struct EMPLOYEE { // Поля public EmpType title;

Слайд 68





		public string name;
		public string name;
		public short deptID;
		// Конструктор
		public EMPLOYEE (EmpType et, string n, short d)
		{
			title = et;
			name = n;
			deptID = d;
		}
	}
Описание слайда:
public string name; public string name; public short deptID; // Конструктор public EMPLOYEE (EmpType et, string n, short d) { title = et; name = n; deptID = d; } }

Слайд 69





При помощи такого определения структуры, в котором предусмотрен конструктор, вы можете создавать новых сотрудников следующим образом:
При помощи такого определения структуры, в котором предусмотрен конструктор, вы можете создавать новых сотрудников следующим образом:
	class StructTester
	{
		// Создаем Мэри и присваиваем ей
		//значения при помощи конструктора
		public static int Main(string[] args)
Описание слайда:
При помощи такого определения структуры, в котором предусмотрен конструктор, вы можете создавать новых сотрудников следующим образом: При помощи такого определения структуры, в котором предусмотрен конструктор, вы можете создавать новых сотрудников следующим образом: class StructTester { // Создаем Мэри и присваиваем ей //значения при помощи конструктора public static int Main(string[] args)

Слайд 70





		{
		{
			// Для вызова нашего
			// конструктора мы обязаны
			// использовать ключевое слово
			// new
			EMPLOYEE mary = new EMPLOYEE(EmpType.VP, “Mary”, 10);
			return 0;
		}
	}
Описание слайда:
{ { // Для вызова нашего // конструктора мы обязаны // использовать ключевое слово // new EMPLOYEE mary = new EMPLOYEE(EmpType.VP, “Mary”, 10); return 0; } }

Слайд 71





Cтруктуры могут быть использованы в качестве принимаемых и возвращаемых методами параметров.
Cтруктуры могут быть использованы в качестве принимаемых и возвращаемых методами параметров.
Описание слайда:
Cтруктуры могут быть использованы в качестве принимаемых и возвращаемых методами параметров. Cтруктуры могут быть использованы в качестве принимаемых и возвращаемых методами параметров.

Слайд 72





Упаковка и распаковка
Упаковка и распаковка — это наиболее удобный способ преобразования структурного типа в ссылочный, и наоборот.
Основное назначение структур — возможность получения некоторых преимуществ объектной ориентации, но при более высокой производительности за счет размещения в стеке.
Описание слайда:
Упаковка и распаковка Упаковка и распаковка — это наиболее удобный способ преобразования структурного типа в ссылочный, и наоборот. Основное назначение структур — возможность получения некоторых преимуществ объектной ориентации, но при более высокой производительности за счет размещения в стеке.

Слайд 73





Чтобы преобразовать структуру в ссылку на объект, необходимо упаковать ее экземпляр:
Чтобы преобразовать структуру в ссылку на объект, необходимо упаковать ее экземпляр:
	// Создаем и упаковываем нового
	// сотрудника
	EMPLOYEE Stan = new EMPLOYEE(EmpType.Grunt, “Stan”, 10);
	object stanInBox = stan;
	//stanInBox относится к ссылочным типам
	// данных, но при этом сохраняет
	//внутренние значения исходного типа
	// данных EMPLOYEE
Описание слайда:
Чтобы преобразовать структуру в ссылку на объект, необходимо упаковать ее экземпляр: Чтобы преобразовать структуру в ссылку на объект, необходимо упаковать ее экземпляр: // Создаем и упаковываем нового // сотрудника EMPLOYEE Stan = new EMPLOYEE(EmpType.Grunt, “Stan”, 10); object stanInBox = stan; //stanInBox относится к ссылочным типам // данных, но при этом сохраняет //внутренние значения исходного типа // данных EMPLOYEE

Слайд 74





Можно использовать stan во всех случаях, когда нужен объект, и при необходимости производить распаковку:
Можно использовать stan во всех случаях, когда нужен объект, и при необходимости производить распаковку:
//Поскольку мы ранее произвели
//упаковку данных, мы можем
//распаковать их и производить операции
//с содержимым
public void UnboxThisEmployee(object о)
Описание слайда:
Можно использовать stan во всех случаях, когда нужен объект, и при необходимости производить распаковку: Можно использовать stan во всех случаях, когда нужен объект, и при необходимости производить распаковку: //Поскольку мы ранее произвели //упаковку данных, мы можем //распаковать их и производить операции //с содержимым public void UnboxThisEmployee(object о)

Слайд 75





{
{
	// Производим распаковку в структуру
	// EMPLOYEE для получения доступа
	// ко всем полям
	EMPLOYEE temp = (EMPLOYEE)o;
	Console.WriteLine(temp.name +“is alive!”);
}
Описание слайда:
{ { // Производим распаковку в структуру // EMPLOYEE для получения доступа // ко всем полям EMPLOYEE temp = (EMPLOYEE)o; Console.WriteLine(temp.name +“is alive!”); }

Слайд 76





Вызов этого метода может выглядеть следующим образом:
Вызов этого метода может выглядеть следующим образом:
// Передаем упакованного сотрудника на
// обработку
	t.UnboxThisEmployee(stanInBox);
Компилятор С# при необходимости автоматически производит упаковку. Поэтому  допускается передать объект stan (типа EMPLOYEE) напрямую:
// Stan будет упакован автоматически
	t.UnboxThisEmployee(stan);
Описание слайда:
Вызов этого метода может выглядеть следующим образом: Вызов этого метода может выглядеть следующим образом: // Передаем упакованного сотрудника на // обработку t.UnboxThisEmployee(stanInBox); Компилятор С# при необходимости автоматически производит упаковку. Поэтому допускается передать объект stan (типа EMPLOYEE) напрямую: // Stan будет упакован автоматически t.UnboxThisEmployee(stan);

Слайд 77





Пользовательские пространства имен
в С#
Описание слайда:
Пользовательские пространства имен в С#

Слайд 78





Определение пользовательских пространств имен
Часто бывает очень полезным сгруппировать используемые в приложении типы данных в специально созданные для этой цели пространства имен.
В С# эта операция производится при помощи ключевого слова namespace.
Описание слайда:
Определение пользовательских пространств имен Часто бывает очень полезным сгруппировать используемые в приложении типы данных в специально созданные для этой цели пространства имен. В С# эта операция производится при помощи ключевого слова namespace.

Слайд 79





Пример
// shapeslib.cs
namespace MyShapes
{
	using System;
	// Класс Circle
	public class Circle { // Интересные методы }
Описание слайда:
Пример // shapeslib.cs namespace MyShapes { using System; // Класс Circle public class Circle { // Интересные методы }

Слайд 80





	public class Hexagon // Класс Hexagon
	public class Hexagon // Класс Hexagon
	{
		 // Более интересные методы 
	}
	public class Square // Класс Square
	{ 
		// Еще более интересные методы 
	}
}
Описание слайда:
public class Hexagon // Класс Hexagon public class Hexagon // Класс Hexagon { // Более интересные методы } public class Square // Класс Square { // Еще более интересные методы } }

Слайд 81





Пространство имен MyShapes действует как контейнер для всех этих типов.
Пространство имен MyShapes действует как контейнер для всех этих типов.
Можно разбить единое пространство имен С# на несколько физических файлов. Для этого достаточно просто определить в разных файлах одно и то же пространство имен и поместить в него определения классов.
Описание слайда:
Пространство имен MyShapes действует как контейнер для всех этих типов. Пространство имен MyShapes действует как контейнер для всех этих типов. Можно разбить единое пространство имен С# на несколько физических файлов. Для этого достаточно просто определить в разных файлах одно и то же пространство имен и поместить в него определения классов.

Слайд 82





// circle.cs
// circle.cs
namespace MyShapes
{
	using System;
	// Класс Circle
	class Circle { // Интересные методы }
}
   Подобным образом определяются hexagon.cs и square.cs.
Описание слайда:
// circle.cs // circle.cs namespace MyShapes { using System; // Класс Circle class Circle { // Интересные методы } } Подобным образом определяются hexagon.cs и square.cs.

Слайд 83





Если потребуется использовать эти классы внутри другого приложения, удобнее всего это сделать при помощи ключевого слова using:
Если потребуется использовать эти классы внутри другого приложения, удобнее всего это сделать при помощи ключевого слова using:
namespace MyApp
{
	using System;
	using MyShapes;
	class ShapeTester
	{
Описание слайда:
Если потребуется использовать эти классы внутри другого приложения, удобнее всего это сделать при помощи ключевого слова using: Если потребуется использовать эти классы внутри другого приложения, удобнее всего это сделать при помощи ключевого слова using: namespace MyApp { using System; using MyShapes; class ShapeTester {

Слайд 84





	public static void Main()
	public static void Main()
   {
		// Все эти объекты были определены
		// в пространстве имен MyShapes
		Hexagon h = new Hexagon();
		Circle с = new Circle();
		Square s = new Square();
	}
}
}
Описание слайда:
public static void Main() public static void Main() { // Все эти объекты были определены // в пространстве имен MyShapes Hexagon h = new Hexagon(); Circle с = new Circle(); Square s = new Square(); } } }

Слайд 85





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

Слайд 86





// Еще одно пространство имен для
// Еще одно пространство имен для
// геометрических фигур
namespace My3DShapes
{
	using System;
	// Класс 3D Circle
	class Circle{}
	// Класс 3D Hexagon
	class Hexagon{}
	// Класс 30 Square
	class Square{}
}
Описание слайда:
// Еще одно пространство имен для // Еще одно пространство имен для // геометрических фигур namespace My3DShapes { using System; // Класс 3D Circle class Circle{} // Класс 3D Hexagon class Hexagon{} // Класс 30 Square class Square{} }

Слайд 87





// В коде есть двусмысленность!
// В коде есть двусмысленность!
namespace MyApp
{
	using System:
	using MyShapes;
	using My3DShapes:
	class ShapeTester
	{
	public static void Main()
	{ // Неизвестно, к объектам какого пространства имен мы
	  //обращаемся
		Hexagon h = new Hexagon();
		Circle с = new Circle();
		Square s = new Square();
	}
	} 
}
Описание слайда:
// В коде есть двусмысленность! // В коде есть двусмысленность! namespace MyApp { using System: using MyShapes; using My3DShapes: class ShapeTester { public static void Main() { // Неизвестно, к объектам какого пространства имен мы //обращаемся Hexagon h = new Hexagon(); Circle с = new Circle(); Square s = new Square(); } } }

Слайд 88





Проще всего избавиться от подобных конфликтов, указав для каждого класса его полное имя вместе с именем соответствующего пространства имен:
Проще всего избавиться от подобных конфликтов, указав для каждого класса его полное имя вместе с именем соответствующего пространства имен:
// Конфликтов больше нет
public static void Main()
{
	My3DShapes.Hexagon h = new My3DShapes.Hexagon();
	My3DShapes.Circle с = new My3DShapes.Circle();
	My3DShapes.Square s = new MyShapes.Square();
}
Описание слайда:
Проще всего избавиться от подобных конфликтов, указав для каждого класса его полное имя вместе с именем соответствующего пространства имен: Проще всего избавиться от подобных конфликтов, указав для каждого класса его полное имя вместе с именем соответствующего пространства имен: // Конфликтов больше нет public static void Main() { My3DShapes.Hexagon h = new My3DShapes.Hexagon(); My3DShapes.Circle с = new My3DShapes.Circle(); My3DShapes.Square s = new MyShapes.Square(); }

Слайд 89





Использование псевдонимов для имен классов
Еще одна возможность избавиться от конфликтов имен — использовать для имен классов псевдонимы.
namespace MyApp
{
	using System;
	using MyShapes:
	using My3DShapes;
Описание слайда:
Использование псевдонимов для имен классов Еще одна возможность избавиться от конфликтов имен — использовать для имен классов псевдонимы. namespace MyApp { using System; using MyShapes: using My3DShapes;

Слайд 90





// Создаем псевдоним для класса из
// Создаем псевдоним для класса из
// другого пространства имен
using The3DHexagon = My3DShapes. Hexagon ;
class ShapeTester
{
	public static void Main()
	{
		Hexagon h = new Hexagon();
		Circle с = new Circle();
		Square s = new Square();
Описание слайда:
// Создаем псевдоним для класса из // Создаем псевдоним для класса из // другого пространства имен using The3DHexagon = My3DShapes. Hexagon ; class ShapeTester { public static void Main() { Hexagon h = new Hexagon(); Circle с = new Circle(); Square s = new Square();

Слайд 91





// Создаем объект при помощи
// Создаем объект при помощи
// псевдонима
		The3DHexagon h2 = new The3DHexagon();
        }
	}
}
Описание слайда:
// Создаем объект при помощи // Создаем объект при помощи // псевдонима The3DHexagon h2 = new The3DHexagon(); } } }

Слайд 92





Вложенные пространства имен
Можно без каких-либо ограничений вкладывать одни пространства имен в другие.
Такой подход очень часто используется в библиотеках базовых классов .NET для организации типов.
Описание слайда:
Вложенные пространства имен Можно без каких-либо ограничений вкладывать одни пространства имен в другие. Такой подход очень часто используется в библиотеках базовых классов .NET для организации типов.

Слайд 93





Пример
// Классы для геометрических фигур
// расположены в пространстве имен
// Chapter2Types.My3DShapes
namespace Chapter2Types
{
	namespace My3DShapes
	{
		using System;
Описание слайда:
Пример // Классы для геометрических фигур // расположены в пространстве имен // Chapter2Types.My3DShapes namespace Chapter2Types { namespace My3DShapes { using System;

Слайд 94





		// Класс 3D Circle
		// Класс 3D Circle
		class Circle{}
		// Класс 3D Hexagon
		class Hexagon{}
		// Класс 30 Square
		class Squared
	}
}
Описание слайда:
// Класс 3D Circle // Класс 3D Circle class Circle{} // Класс 3D Hexagon class Hexagon{} // Класс 30 Square class Squared } }

Слайд 95





Конец!!!
Описание слайда:
Конец!!!



Похожие презентации
Mypresentation.ru
Загрузить презентацию