MicrosoftVisualStudio .NET - это интегрированная среда разработки для создания, документирования, запуска и отладки программ, написанных на языках .NET.
Эта среда разработки является открытой языковой средой. Наряду с языками программирования, изначально включенными в среду - C++, C#, J#, Visual Basic, - в нее могут добавляться любые языки программирования, компиляторы которых создаются сторонними разработчиками. Необходимым условием для включения языков в среду VisualStudio .NET является использование единого каркаса - платформы Framework.Net.
Платформа Framework.NET позволяет:
Для разработки приложений в Visual Studio.NET используются проекты.
Проект (Project) - это основная единица, с которой имеет дело разработчик. Сначала он должен выбрать тип проекта, после чего Visual Studio создает каркас проекта в соответствии с выбранным типом.
Проект состоит из классов, собранных в одном или нескольких пространствах имен. Пространства имен (Namespaces) позволяют структурировать проекты, содержащие большое число классов, объединяя в одну группу близкие классы.
Несколько проектов могут объединяться в решение (Solution), которое также может включать ресурсы, необходимые этим проектам.
С точки зрения разработчика конечным результатом его работы, получаемым после компиляции исходного программного кода, является решение, а с точки зрения CLR (Common Language Runtime - общеязыковой среды исполнения) - сборка (assembly), содержащая PE файл, т.е. модуль в формате исполняемого файла PE (Portable Executable) для 32-разрядной ОС Windows либо DLL (Dynamic Link Library) файл.
Visual Studio.Net предлагает большое разнообразие возможных типов проектов. Для ознакомления с основами языка С# в основном будут использованы консольные приложения без привлечения привычных в Windows возможностей пользовательского интерфейса.
В C# нет глобальных функций, поэтому по умолчанию при создании консольного приложения объявляется класс Program, который содержит функцию static Main(), служащую начальной точкой выполнения программы. Функция Main может быть объявлена без параметров или с параметром, представляющий собой массив строк.
Также программа на C# может содержать комментарии и атрибуты.
В C# используются однострочные и многострочные комментарии. Однострочный комментарий начинается с пары символов "//", и весь текст до конца строки является комментарием. Многострочный комментарий начинается с пары символов /* и заканчивается */.
Атрибут - средство добавления декларативной информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (т.е. правила сохранения информации), отладка, и др. Атрибуты могут быть как стандартными, так и заданными пользователем. Стандартные атрибуты используются CLR и влияют на то, как будет выполняться проект. Атрибут размещается в скобках "[]".
Стандарт языка C++ включает следующий набор фундаментальных типов.
bool).
char).
short, int, long, а также могут быть знаковыми (signed) или беззнаковыми (unsigned).
float, double и long double.
Тип void указывает на отсутствие информации.
К конструируемым типам относятся следующие:
char*).
char).
char[]).
Также язык позволяет разработчику конструировать собственные типы:
enum).
struct).
В языке C# все типы можно рассматривать и под другим ракурсом, разделив их на четыре категории:
value).
reference).
pointer).
void.
Для ссылочного типа значение задает ссылку на область памяти в "куче" (heap), где расположен соответствующий объект. Для типа-значения значением являются собственно данные, а память для них выделяется в стеке.
Логический, арифметический, структуры, перечисление относятся типам-значениям. Массивы, строки и классы относятся к ссылочным типам.
И ссылочные, и обычные типы являются производными от базового класса object. В тех случаях, когда обычный тип должен вести себя как объект, создается оболочка (wrapper), которую можно рассматривать как ссылочный объект, помещенный в кучу, и в нее копируется значение переменной обычного типа. Оболочка автоматически помечается таким образом, что система знает, какое значение она содержит. Этот процесс назывется упаковкой (boxing), а обратный процесс - распаковкой ().
Упаковка происходит автоматически, для этого нужно только присвоить значение обычного типа переменной типа object. Упаковка и распаковка позволяют обрабатывать любой тип как объект. Например, в выражении
7.ToString();
целое число 7 упаковывается путем вызова функции Int32.ToString().
Массивы в C# могут быть многомерными (System.Collections.
Выражения строятся из операндов - констант, переменных, функций, - объединенных знаками операций и скобками. При вычислении выражения определяется его значение и тип.
В таблице ниже приведен список операций C#.
| Категория операций | Операции |
|---|---|
| Арифметические | + - * / %
|
Логические (boolean и побитовые)
| | ^ ! ~ ||
|
| Строковые | +
|
| Инкремент и декремент | ++ --
|
| Сдвиг | >> <<
|
| Сравнение | == != < > <= >=
|
| Присвоение | = += -= *= /= %= = |= ^= <<= >>=
|
| Обращение к члену класса | .
|
| Индексация | []
|
| Приведение типа (Cast) | ()
|
| Условие | ?:
|
| Создание объекта | new()
|
| Информация о типе | is sizeof typeof
|
| Управление исключениями | checked unchecked
|
| Косвенности и адресации | * -> []
|
Имя и тип переменной задаются при ее объявлении и остаются неизменными в течение всего времени ее жизни. Особенностью языка C# является требование обязательной инициализации переменной до начала ее использования. Попытка использовать неинициализированную переменную приводит к ошибкам, обнаруживаемым еще на этапе компиляции.
По используемым выражениям и операторам C# похож на C++. Так в программах на C# используются такие операторы как:
=)
{})
if-else и switch
for, while, оператор
break и continue
return
goto
Кроме того, введены несколько новых инструкций.
Например, оператор foreach позволяет получить доступ ко всем элементам массива или коллекции поочередно, в порядке возрастания индексов. Его синтаксис:
foreach (тип идентификатор in контейнер) оператор
В C# процедуры и функции существуют только как методы некоторого класса, они не определены вне класса. Роль библиотек процедур и функций выполняют библиотеки классов. Библиотека классов Framework Class Library (FCL), доступная в языке C#, существенно расширяет возможности языка.
В Visual Studio.Net, и в C# в частности, любая программная система рассматривается как совокупность классов, объединенных в проекты, пространства имен, решения.
Описание класса имеет следующий синтаксис:
[атрибуты][модификаторы]class имя_класса[:список_родителей] {тело_класса}
В теле класса могут быть объявлены:
Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных. Поля характеризуют свойства объектов класса.
Методы класса синтаксически являются обычными процедурами и функциями языка. Методы содержат описания операций, доступных над объектами класса. Методы, называемые свойствами явлются специальной синтаксической конструкцией, предназначенной для обеспечения эффективной работы с классами.
Конструктор представляет собой специальный метод класса, позволяющий создавать объекты класса. Его имя должно совпадать с именем класса. Если разработчик не определяет конструктор класса, то к классу автоматически добавляется конструктор по умолчанию - конструктор без аргументов.
Делегат в C# представляет собой описание специального случая класса и задает определение функционального типа (класса) данных. Экземплярами класса являются функции. Каждый делегат описывает множество функций с заданной сигнатурой. Каждая функция (метод), сигнатура которого совпадает с сигнатурой делегата, может рассматриваться как экземпляр класса, заданного делегатом. Синтаксис объявления делегата имеет следующий вид:
[<спецификатор доступа>] delegate <тип результата> <имя класса> (<список аргументов>);
Язык C# предоставляет средства для работы с одномерными массивами, массивами массивов и многомерными массивами.
Ниже представлены способы объявления ссылок на массивы различной размерности и конфигурации.
// Объявление массива размерности 3 из элементов типа int.
// Фактически это массив составляющих, представляющих собой массивы
// размерности 2 одномерных массивов элементов типа int.
// Размеры всех составляющих массивов одного уровня равны
// между собой ("прямоугольный" массив).
int[,,] ar1;
// Объявление одномерного массива из
// одномерных массивов элементов, каждый из которых является
// одномерным массивом элементов типа int.
int[][][] ar2;
// Объявление одномерного массива составляющих, каждый из которых является
// двумерным массивом массивов элементов типа int.
// При этом у всех составляющих могут быть разные размеры
int[][,] ar3;
// Объявление двумерного массива составляющих, каждая из которых является
// одномерным массивом элементов типа int.
// При этом у всех составляющих могут быть разные размеры.
int[,][] ar4;
Рассмотренные примеры демонстрируют определение двух различных категории массивов:
Объявление массива может быть совмещено с инициализацией. При Null. Поэтому пока массив не будет реально создан и его элементы инициализированы, использовать его нельзя.
Возможны два варианта объявления массива совмещенного с инициализацией.
В первом случае инициализация является явной и задается списком констант, например:
int[] odd = {1, 3, 5, 7, 9};
Во втором случае создание и инициализация массива реализуется вместе с вызовом конструктора массива. Например:
int[] even = new int[5];
Все массивы являются потомками класса System.Array, который в свою очередь наследует ряд интерфейсов: , , , IEnumerable, а, следовательно, реализует все их методы и свойства. Кроме того, класс Array имеет большое число собственных методов и свойств.
Благодаря наследованию от класса System.Array, для массивов определены такие встроенные методы копирования, поиска, обращения, сортировки. Массивы можно рассматривать также как как коллекции и использовать цикл foreach для перебора его элементов.
Ниже приведены основные свойства и методы класса System.Array:
| Свойство | Описание |
|---|---|
IsFixedSize
| Возвращает true, если массив является статическим
|
IsReadOnly
| Для всех массивов возвращает значение false
|
IsSynchronized
| Возвращает true или false, в зависимости от того, установлена ли синхронизация доступа для массива
|
Length
| Число элементов в массиве |
Rank
| Размерность массива |
| Метод | Описание |
|---|---|
| Бинарный поиск элементов |
Clear
| Выполняет инициализацию элементов. Числовые элементы становятся нулевыми, а строковые принимают значение Null
|
Clone
| Клонирование массива |
Copy
| Копирование части или всего массива в другой массив |
CopyTo
| Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса |
CreateInstance
| Создание экземпляра массива |
GetEnumerator
| Возварщает интерфейс IEnumerator. Необходим для использования в цикле foreach
|
GetLength
| Возвращает число элементов массива по указанному измерению |
GetLowerBound, GetUpperBound
| Возвращает нижнюю и верхнюю границу по указанному измерению. Для массивов нижняя граница всегда равна нулю. |
GetValue SetValue
| Возвращает или устанавливает значение элемента массива с указанными индексами. |
IndexOf
| Индекс первого вхождения образца в массив |
LastIndexOf
| Индекс последнего вхождения образца в массив |
Reverse
| Сортировка одномерного массива в обратном порядке |
Sort
| Сортировка массива |
В языке C# определен класс сhar[], и его можно использовать для представления строк постоянной длины. Однако массив сhar[] - это обычный массив, поэтому его нельзя инициализировать строкой символов. В C# не определено преобразование из класса сhar[] в класс String. У String есть динамический метод ToCharArray, задающий подобное преобразование в сhar[].
Объекты класса String объявляются с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. У класса String достаточно много конструкторов, которые позволяют сконструировать строку из:
char[];
Методы класса String позволяют выполнять вставку, удаление, замену, поиск вхождения подстроки в строку. Класс String наследует методы класса Object, а также методы четырех интерфейсов: IComparable, , IConvertible, IEnumerable.
Некоторые из членов класса приведены в таблице:
| Метод | Описание |
|---|---|
Length
| Это свойство возвращает длину указанной строки |
Insert
| Вставляет подстроку в заданную позицию |
Remove
| Удаляет подстроку в заданной позиции |
Replace
| Заменяет подстроку в заданной позиции на новую подстроку |
Substring
| Выделяет подстроку в заданной позиции |
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny
| Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора |
StartsWith, EndsWith
| Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой
|
PadLeft, PadRight
| Выполняет заполнение нужным числом пробелов в начале и в конце строки |
Trim, TrimStart, TrimEnd
| Удаляются пробелы в начале и в конце строки, либо только с одного конца |
ToCharArray
| Преобразование строки в массив символов |
Класс String не разрешает изменять существующие объекты. Для этой цели имеется другой класс - класс StringBuilder, который позволяет исправить данный недостаток. Этот класс принадлежит к изменяемым классам и его можно найти в пространстве имен System.Text.
Объекты этого класса объявляются с явным вызовом конструктора класса. Конструктор класса перегружен, и наряду с конструктором без параметров, создающим пустую строку, имеется набор конструкторов, которым можно передать две группы параметров:
StringBuilder.
StringBuilder.
Примеры конструкторов:
public StringBuilder(string str, int size). Параметр str задает строку для инициализации, size - размер объекта;
public StringBuilder(int cursize, int maxsize). Параметры cursize и maxsize задают начальный и максимальный размер объекта;
public StringBuilder(string str, int start, int len, int size). Параметры str, start, len задают строку инициализации, size - размер объекта.
Над строками этого класса определены (также как идля строк класса String) операции:
=);
==) и (!=);
[]).
Операция конкатенации (+) не определена над строками класса StringBuilder, ее роль играет метод Append, добавляющий новую строку в конец существующей.
Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. Однако методы интерфейса объявляются без указания модификатора доступа, и класс, наследующий интерфейс, обязан полностью реализовать все методы интерфейса. В этом - отличие от класса, наследующего абстрактный класс, где потомок может реализовать лишь некоторые методы родительского абстрактного класса, оставаясь абстрактным классом.
Интерфейс позволяет описывать некоторые желательные свойства, которыми могут обладать объекты разных классов.
Среди интерфейсов, встроенных в библиотеку базовых классов .NET, можно особо выделить такие как:
IEnumerable (для работы с наборами объектов, в т.ч. с использованием оператора foreach).
IClonable (копирование объектов).
IComparable (для сравнения и сортировки объектов).
Пространство имен System.Collections, предназначенное для работы с наборами объектов, поддерживает интерфейсы:
ICollection (определяет общие характеристики класса набора элементов).
IComparer, IDictionary (позволяет представлять содержимое объекта в виде пар имя-значение).
IDictionaryEnumerator (нумерация содержимого объекта, поддерживающего IDictionary).
IEnumerable, IEnumerator.
IHashCodeProvider (возвращает хэш-код с помощью выбранного алгоритма хэширования).
IList (обеспечивает методы добавления, удаления и индексирования элементов в списке объектов).
Visual Web Developer Express - это полнофункциональная среда разработки, предназначенная для создания веб-приложений ASP.NET, называемых "веб-узлами".
Visual Web Developer Express (VWDE) предоставляет в распоряжение веб-разработчика следующие функциональные возможности:
Visual Web Developer Express (VWDE) представляет собой удобную среду для построения веб-узлов и их публикации. Используя инструменты разработки VWDE, можно разрабатывать веб-узлы ASP.NET на собственном компьютере. В состав VWDE входит локальный веб-сервер, который обеспечивает все функции, необходимые для тестирования и отладки веб-узлов ASP.NET, и не требует установки сервера IIS.
В VWDE можно произвести предварительную компиляцию и развернуть веб-узел при помощи команды "Построить веб-узел" (Build Web Site). Команда "Построить веб-узел" запускает компилятор для всего веб-узла, а не только для файлов кода, и создает макет веб-узла, который можно развертывать уже на рабочем сервере.
Visual Web Developer Express предоставляет в распоряжение веб-разработчика целый набор шаблонов ASP.NET 2.0. По-сути - это готовые веб-узлы, которые можно использовать в качестве собственных веб-узлов с минимальными изменениями. Чтобы использовать шаблон, необходимо создать новый новый веб-узел и выбрать требуемый шаблон.
В VWDE можно создавать проекты, веб-узлы и отдельные файлы.
Для практического изучения примеров в данной лабораторной работе необходимо наличие установленного пакета Microsoft Visual Studio (версии не ранее 2003). В зависимости от установленной версии возможны несущественные отличия в интерфейсе среды при создании и работе с проектом консольного приложения.
Program.cs на языке C#:
В данной программе объявление using System дает возможность ссылаться на классы, которые находятся в пространстве имен System, так что их можно использовать, не добавляя "System." перед именем типа.
Пространство имен System содержит много полезных классов. Одним из них является и класс Console, который используется при создании консольных приложений.
Класс проекта - Program размещен в пространстве имен, имеющем по умолчанию то же самое имя (HelloWorldDemo), что и решение, содержащее в данном примере единственный проект.
Поскольку в C# нет глобальных функций, поэтому в данном примере объявляется класс Program, который содержит функцию static Main(), служащую начальной точкой выполнения программы. Функция Main может быть объявлена без параметров или с параметром, представляющий собой массив строк. Так как функция Main является точкой входа, она должна быть статической (static) функцией, т.е. она не связана с конкретным объектом класса, в котором объявлена.
Main следующую строку:
Console.WriteLine("Hello world!");
которая использует метод WriteLine класса Console для вывода строки "Hello world!".
static void Main(string[] args)
{
int[] ArInt = { 0, 9, 1, 8, 2, 7, 3, 6, 4, 5 };
Console.WriteLine("Array contains elements:");
foreach (int item in ArInt)
{
Console.Write("{0} ", item);
}
Console.WriteLine("");
}
После повторения шагов 3-4 получим следующее окно:
Следующие две программы демонстрируют, каким образом выполняется инициализация и работа с прямоугольными и ломаными массивами в C#.
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Прямоугольный многомерный массив
int[,]multMatr;
multMatr = new int[10,10];
// Заполнение массива 9 на 9:
for (int i = 1; i <= 9; i++)
for (int j = 1; j < 9; j++)
multMatr[i, j] = i * j;
// Вывод элементов многомерного массива
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
Console.Write(multMatr [i, j] + "\t");
}
Console.WriteLine();
}
}
}
В результат выполнения программы получим таблицу умножения следующего вида:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Ломаный многомерный массив из пяти внутренних массивов разного размера
int[][] JagArr = new int[10][];
// Инициализация генератора случайных чисел
Random rand = new Random();
// Динамическое создание ломаного массив
for (int i = 0; i < JagArr.Length; i++)
{
JagArr[i] = new int[i + rand.Next(10)];
}
// Вывод строк на консоль
// Каждый элемент по умолчанию имеет значение, равное
for (int i = 0; i < 10; i++)
{
// Свойство Length массива возвращает его размер
Console.Write("Length of row {0} is {1}:\t", i, JagArr[i].Length);
for (int j = 0; j < JagArr[i].Length; j++)
{
Console.Write(JagArr[i][j] + " ");
}
Console.WriteLine();
}
}
}
}
В результате выполнения программы получим следующую таблицу:
Свойства и методы класса Array.
Следующий пример демонстрирует использование некоторых из свойств и методов класса Array:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Массив символьных строк
string[] Brands = new string[]
{"Audi",
"BMW",
"Buick",
"Chevrolet",
"Citroen",
"Dodge",
"Ferrari",
"Fiat",
"Ford",
"Honda",
"Hyundai",
"Cherokee",
"Cherry",
"Lada",
"Lamborghini",
"Lincoln",
"Mazda",
"Mercedes",
"Mitsubishi",
"Nissan",
"Opel",
"Peugeot",
"Plymoth",
"Pontiac",
"Renault",
"Rover",
"Saab",
"Subaru",
"Suzuki",
"Toyota",
"Volkswagen",
"Volvo"};
// Вывод марок автомобилей в соответствии с порядком элементов в массиве
Console.WriteLine("Here is the array of car brands:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Сортировка элементов в обратном порядке
Array.Reverse(Brands);
// Вывод автомарок
Console.WriteLine("Here is the list once reversed:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Остаются только первый и последний
Console.WriteLine("Only two remain: ");
Array.Clear(Brands, 2, Brands.Length-2);
for (int i = 0; i < Brands.Length; i++)
{
Console.Write(Brands[i] + "\t\n");
}
}
}
}
Результат работы программы:
Использование класса StringBuilder
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
StringBuilder WordList = new StringBuilder("Каждый Охотник ");
WordList.Append("Желает Знать Где ");
Console.WriteLine(WordList);
WordList.Append("Сидит Фазан");
Console.WriteLine(WordList);
// Сделать все буквы прописными
string Spectrum = WordList.ToString().ToUpper();
Console.WriteLine(Spectrum);
}
}
}
Результат работы программы:
Использование класса ArrayList
Использование класса ArrayList из пространства имен System.Collections позволяет эффективно реализовать работу с массивами объектов, поскольку многие возможности, необходимые для этого реализованы изначально, в частности методы вставки, удаления и нумерации элементов.
Для использования возможностей ArrayList используется не обычное наследование, а модель включения в виде делегирования вызовов на выполнение различных действий классу производному от ArrayList:
public class NBooks : IEnumerable
{
// nbList - внутренний класс, который будет делать всю работу
private ArrayList nbList;
// Создаем объект класса nbList при помощи конструктора NBooks
public NBooks() {nbList = new ArrayList();}
// Реализуем нужные нам методы для приема вызовов извне и передачи их nbList
// Метод для вставки объекта NBook
public void AddNBook(NBook nb)
{ nbList.Add(nb); }
// Метод для удаления объекта NBook
public void RemoveNBook(int nbToRemove)
{ nbList.RemoveAt(nbToRemove); }
// Свойство, возвращающее количество объектов NBook
public int NBookCount
{ get { return nbList.Count; } }
// Метод для очистки объекта - удаления всех объектов NBook
public void ClearAllNBooks()
{ nbList.Clear(); }
// Метод, который отвечает на вопрос - есть ли уже в наборе такой объект NBook
public bool NBookIsPresent(NBook c)
{ return nbList.Contains(c); }
// Все, что связано с реализацией IEnumerator, перенаправляется в nbList
public IEnumerator GetEnumerator()
{ return nbList.GetEnumerator(); }
}
Реализация класса NBook и код программы, использующей класс NBooks представлены ниже.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace NBooks
{
public class NBook
{
// Конструктор класса NBook
public string Model;
public string CPU_model;
public int CPU_clock;
public int RAM_size;
public NBook(string mname, string CPU, int Clock, int RAM)
{
Model = mname;
CPU_model = CPU;
CPU_clock = Clock;
RAM_size = RAM;
}
}
class Program
{
static void Main(string[] args)
{
NBooks nbLot = new NBooks();
// Создание списка объектов NBook
nbLot.AddNBook( new NBook("ASUS A7Sn","Intel Core 2 Duo T8300", 2400, 2048));
nbLot.AddNBook( new NBook("Acer Aspire 5530G-803G25Mi","AMD Turion X2 Ultra ZM80", 2100, 3072));
nbLot.AddNBook( new NBook("Fujitsu Amilo Si 2636", "Intel Core 2 Duo T8300", 2400, 2048));
nbLot.AddNBook( new NBook("HP Pavilion tx2650er", "AMD Turion X2 Ultra ZM82", 2200, 4096));
// Выводим информацию о каждом объекте при помощи конструкции foreach
Console.WriteLine("You have {0} in the lot: \n", nbLot.NBookCount);
foreach (NBook nb in nbLot)
{
Console.WriteLine("Model: {0}", nb.Model);
Console.Write("CPU: {0}", nb.CPU_model);
Console.WriteLine(" {0} GHz", nb.CPU_clock);
Console.WriteLine("RAM: {0} GB\n", nb.RAM_size);
}
// Удаляем один из ноутбуков
nbLot.RemoveNBook(3);
Console.WriteLine("You have {0} in the lot.\n", nbLot.NBookCount);
// Добавляем еще один ноутбук и проверяем его наличие в наборе
NBook temp = new NBook("ASUS M51Ta", "AMD Turion™ X2 Ultra ZM84", 2300, 4096);
nbLot.AddNBook(temp);
if(nbLot.NBookIsPresent(temp))
Console.WriteLine(temp.Model + " is already in the lot.");
// Удалить все
nbLot.ClearAllNBooks();
Console.WriteLine("You have {0} in the lot.\n", nbLot.NBookCount);
}
}
}
Результат выполнения программы:
Table и перетащите его в окно с HTML кодом. В результате в HTML коде странице автоматически добавятся теги, описывающие пустую таблицу. Причем в режиме отображения "split" (задается выбором закладки в нижней части окна с кодом HTML) внизу появится окно дизайна с видом пустой таблицы.
<td> на <th> для того, чтобы сформировать "шапку" таблицы.
| № | Дисциплина | Семестр | Учебных часов |
|---|---|---|---|
| 1 | Математический анализ | 1 | 90 |
| 2 | Информатика | 1 | 72 |
| 3 | Философия | 3 | 72 |
| 4 | Информационные сети | 6 | 64 |
#subjects
font-family:" Times New Roman, Times, serif";
width:100%;
border-collapse :collapse;
#subjects td, #subjects th" значения категорий:
font-size:1em;
border:1px solid #98bf21;
padding:3px 7px 2px 7px;
"#subjects th" отдельно определите следующие значения:
font-size:1.1em;
text-align:left;
padding-top:5px;
padding-bottom:4px;
background-color:#A7C942;
color:#ffffff;
а для селектора "#subjects tr.alt td":
color:#000000;
background-color:#EAF2D3;
В итоге в окне HTML кода появится новая секция объявления списка стилей:
Id значение subjects:
Таким же образом для 2-й и 4-й строк таблицы задайте значение свойства class = "alt".
В результате в HTML коде будут автоматически добавлены идентификаторы (классы) задающие стиль элементов таблицы.
Table.html".
Требуется разработать приложение, которое по заданным значениям коэффициентов a,b и c квадратного уравнения (значения вводятся с клавиатуры пользователем) вычисляет и отображает на экране корни уравнения.
Для данного приложения потребуются следующие методы:
string Console.ReadLine() - чтение строки символов из входного потока.
double Convert.ToDouble(string) - преобразование строки символов в число с плавающей запятой двойной точности.
double Math.Sqrt(double) - извлечение квадратного корня числа.
Для изучения приводимых в лабораторной работе примеров необходимо создать в Microsoft Visual Studio проект консольного приложения и описать класс Program, используя приводимый в примерах код.
IndexOf(string findThisString) для строковых элементов массива. Метод возвращает позицию начала искомой подстроки от начала строки, либо значение -1 при отсутствии соответствия.
Table.html должна быть только ссылка на внешний файл. Проверьте, какие изменения произойдут при этом в режиме работы с панелью инструментов разработчика в IE9.
MicrosoftVisualStudio .NET - это интегрированная среда разработки для создания, документирования, запуска и отладки программ, написанных на языках .NET.
Эта среда разработки является открытой языковой средой. Наряду с языками программирования, изначально включенными в среду - C++, C#, J#, Visual Basic, - в нее могут добавляться любые языки программирования, компиляторы которых создаются сторонними разработчиками. Необходимым условием для включения языков в среду VisualStudio .NET является использование единого каркаса - платформы Framework.Net.
Платформа Framework.NET позволяет:
Для разработки приложений в Visual Studio.NET используются проекты.
Проект (Project) - это основная единица, с которой имеет дело разработчик. Сначала он должен выбрать тип проекта, после чего Visual Studio создает каркас проекта в соответствии с выбранным типом.
Проект состоит из классов, собранных в одном или нескольких пространствах имен. Пространства имен (Namespaces) позволяют структурировать проекты, содержащие большое число классов, объединяя в одну группу близкие классы.
Несколько проектов могут объединяться в решение (Solution), которое также может включать ресурсы, необходимые этим проектам.
С точки зрения разработчика конечным результатом его работы, получаемым после компиляции исходного программного кода, является решение, а с точки зрения CLR (Common Language Runtime - общеязыковой среды исполнения) - сборка (assembly), содержащая PE файл, т.е. модуль в формате исполняемого файла PE (Portable Executable) для 32-разрядной ОС Windows либо DLL (Dynamic Link Library) файл.
Visual Studio.Net предлагает большое разнообразие возможных типов проектов. Для ознакомления с основами языка С# в основном будут использованы консольные приложения без привлечения привычных в Windows возможностей пользовательского интерфейса.
В C# нет глобальных функций, поэтому по умолчанию при создании консольного приложения объявляется класс Program, который содержит функцию static Main(), служащую начальной точкой выполнения программы. Функция Main может быть объявлена без параметров или с параметром, представляющий собой массив строк.
Также программа на C# может содержать комментарии и атрибуты.
В C# используются однострочные и многострочные комментарии. Однострочный комментарий начинается с пары символов "//", и весь текст до конца строки является комментарием. Многострочный комментарий начинается с пары символов /* и заканчивается */.
Атрибут - средство добавления декларативной информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (т.е. правила сохранения информации), отладка, и др. Атрибуты могут быть как стандартными, так и заданными пользователем. Стандартные атрибуты используются CLR и влияют на то, как будет выполняться проект. Атрибут размещается в скобках "[]".
Стандарт языка C++ включает следующий набор фундаментальных типов.
bool).
char).
short, int, long, а также могут быть знаковыми (signed) или беззнаковыми (unsigned).
float, double и long double.
Тип void указывает на отсутствие информации.
К конструируемым типам относятся следующие:
char*).
char).
char[]).
Также язык позволяет разработчику конструировать собственные типы:
enum).
struct).
В языке C# все типы можно рассматривать и под другим ракурсом, разделив их на четыре категории:
value).
reference).
pointer).
void.
Для ссылочного типа значение задает ссылку на область памяти в "куче" (heap), где расположен соответствующий объект. Для типа-значения значением являются собственно данные, а память для них выделяется в стеке.
Логический, арифметический, структуры, перечисление относятся типам-значениям. Массивы, строки и классы относятся к ссылочным типам.
И ссылочные, и обычные типы являются производными от базового класса object. В тех случаях, когда обычный тип должен вести себя как объект, создается оболочка (wrapper), которую можно рассматривать как ссылочный объект, помещенный в кучу, и в нее копируется значение переменной обычного типа. Оболочка автоматически помечается таким образом, что система знает, какое значение она содержит. Этот процесс назывется упаковкой (boxing), а обратный процесс - распаковкой ().
Упаковка происходит автоматически, для этого нужно только присвоить значение обычного типа переменной типа object. Упаковка и распаковка позволяют обрабатывать любой тип как объект. Например, в выражении
7.ToString();
целое число 7 упаковывается путем вызова функции Int32.ToString().
Массивы в C# могут быть многомерными (System.Collections.
Выражения строятся из операндов - констант, переменных, функций, - объединенных знаками операций и скобками. При вычислении выражения определяется его значение и тип.
В таблице ниже приведен список операций C#.
| Категория операций | Операции |
|---|---|
| Арифметические | + - * / %
|
Логические (boolean и побитовые)
| | ^ ! ~ ||
|
| Строковые | +
|
| Инкремент и декремент | ++ --
|
| Сдвиг | >> <<
|
| Сравнение | == != < > <= >=
|
| Присвоение | = += -= *= /= %= = |= ^= <<= >>=
|
| Обращение к члену класса | .
|
| Индексация | []
|
| Приведение типа (Cast) | ()
|
| Условие | ?:
|
| Создание объекта | new()
|
| Информация о типе | is sizeof typeof
|
| Управление исключениями | checked unchecked
|
| Косвенности и адресации | * -> []
|
Имя и тип переменной задаются при ее объявлении и остаются неизменными в течение всего времени ее жизни. Особенностью языка C# является требование обязательной инициализации переменной до начала ее использования. Попытка использовать неинициализированную переменную приводит к ошибкам, обнаруживаемым еще на этапе компиляции.
По используемым выражениям и операторам C# похож на C++. Так в программах на C# используются такие операторы как:
=)
{})
if-else и switch
for, while, оператор
break и continue
return
goto
Кроме того, введены несколько новых инструкций.
Например, оператор foreach позволяет получить доступ ко всем элементам массива или коллекции поочередно, в порядке возрастания индексов. Его синтаксис:
foreach (тип идентификатор in контейнер) оператор
В C# процедуры и функции существуют только как методы некоторого класса, они не определены вне класса. Роль библиотек процедур и функций выполняют библиотеки классов. Библиотека классов Framework Class Library (FCL), доступная в языке C#, существенно расширяет возможности языка.
В Visual Studio.Net, и в C# в частности, любая программная система рассматривается как совокупность классов, объединенных в проекты, пространства имен, решения.
Описание класса имеет следующий синтаксис:
[атрибуты][модификаторы]class имя_класса[:список_родителей] {тело_класса}
В теле класса могут быть объявлены:
Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных. Поля характеризуют свойства объектов класса.
Методы класса синтаксически являются обычными процедурами и функциями языка. Методы содержат описания операций, доступных над объектами класса. Методы, называемые свойствами явлются специальной синтаксической конструкцией, предназначенной для обеспечения эффективной работы с классами.
Конструктор представляет собой специальный метод класса, позволяющий создавать объекты класса. Его имя должно совпадать с именем класса. Если разработчик не определяет конструктор класса, то к классу автоматически добавляется конструктор по умолчанию - конструктор без аргументов.
Делегат в C# представляет собой описание специального случая класса и задает определение функционального типа (класса) данных. Экземплярами класса являются функции. Каждый делегат описывает множество функций с заданной сигнатурой. Каждая функция (метод), сигнатура которого совпадает с сигнатурой делегата, может рассматриваться как экземпляр класса, заданного делегатом. Синтаксис объявления делегата имеет следующий вид:
[<спецификатор доступа>] delegate <тип результата> <имя класса> (<список аргументов>);
Язык C# предоставляет средства для работы с одномерными массивами, массивами массивов и многомерными массивами.
Ниже представлены способы объявления ссылок на массивы различной размерности и конфигурации.
// Объявление массива размерности 3 из элементов типа int.
// Фактически это массив составляющих, представляющих собой массивы
// размерности 2 одномерных массивов элементов типа int.
// Размеры всех составляющих массивов одного уровня равны
// между собой ("прямоугольный" массив).
int[,,] ar1;
// Объявление одномерного массива из
// одномерных массивов элементов, каждый из которых является
// одномерным массивом элементов типа int.
int[][][] ar2;
// Объявление одномерного массива составляющих, каждый из которых является
// двумерным массивом массивов элементов типа int.
// При этом у всех составляющих могут быть разные размеры
int[][,] ar3;
// Объявление двумерного массива составляющих, каждая из которых является
// одномерным массивом элементов типа int.
// При этом у всех составляющих могут быть разные размеры.
int[,][] ar4;
Рассмотренные примеры демонстрируют определение двух различных категории массивов:
Объявление массива может быть совмещено с инициализацией. При Null. Поэтому пока массив не будет реально создан и его элементы инициализированы, использовать его нельзя.
Возможны два варианта объявления массива совмещенного с инициализацией.
В первом случае инициализация является явной и задается списком констант, например:
int[] odd = {1, 3, 5, 7, 9};
Во втором случае создание и инициализация массива реализуется вместе с вызовом конструктора массива. Например:
int[] even = new int[5];
Все массивы являются потомками класса System.Array, который в свою очередь наследует ряд интерфейсов: , , , IEnumerable, а, следовательно, реализует все их методы и свойства. Кроме того, класс Array имеет большое число собственных методов и свойств.
Благодаря наследованию от класса System.Array, для массивов определены такие встроенные методы копирования, поиска, обращения, сортировки. Массивы можно рассматривать также как как коллекции и использовать цикл foreach для перебора его элементов.
Ниже приведены основные свойства и методы класса System.Array:
| Свойство | Описание |
|---|---|
IsFixedSize
| Возвращает true, если массив является статическим
|
IsReadOnly
| Для всех массивов возвращает значение false
|
IsSynchronized
| Возвращает true или false, в зависимости от того, установлена ли синхронизация доступа для массива
|
Length
| Число элементов в массиве |
Rank
| Размерность массива |
| Метод | Описание |
|---|---|
| Бинарный поиск элементов |
Clear
| Выполняет инициализацию элементов. Числовые элементы становятся нулевыми, а строковые принимают значение Null
|
Clone
| Клонирование массива |
Copy
| Копирование части или всего массива в другой массив |
CopyTo
| Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса |
CreateInstance
| Создание экземпляра массива |
GetEnumerator
| Возварщает интерфейс IEnumerator. Необходим для использования в цикле foreach
|
GetLength
| Возвращает число элементов массива по указанному измерению |
GetLowerBound, GetUpperBound
| Возвращает нижнюю и верхнюю границу по указанному измерению. Для массивов нижняя граница всегда равна нулю. |
GetValue SetValue
| Возвращает или устанавливает значение элемента массива с указанными индексами. |
IndexOf
| Индекс первого вхождения образца в массив |
LastIndexOf
| Индекс последнего вхождения образца в массив |
Reverse
| Сортировка одномерного массива в обратном порядке |
Sort
| Сортировка массива |
В языке C# определен класс сhar[], и его можно использовать для представления строк постоянной длины. Однако массив сhar[] - это обычный массив, поэтому его нельзя инициализировать строкой символов. В C# не определено преобразование из класса сhar[] в класс String. У String есть динамический метод ToCharArray, задающий подобное преобразование в сhar[].
Объекты класса String объявляются с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. У класса String достаточно много конструкторов, которые позволяют сконструировать строку из:
char[];
Методы класса String позволяют выполнять вставку, удаление, замену, поиск вхождения подстроки в строку. Класс String наследует методы класса Object, а также методы четырех интерфейсов: IComparable, , IConvertible, IEnumerable.
Некоторые из членов класса приведены в таблице:
| Метод | Описание |
|---|---|
Length
| Это свойство возвращает длину указанной строки |
Insert
| Вставляет подстроку в заданную позицию |
Remove
| Удаляет подстроку в заданной позиции |
Replace
| Заменяет подстроку в заданной позиции на новую подстроку |
Substring
| Выделяет подстроку в заданной позиции |
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny
| Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора |
StartsWith, EndsWith
| Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой
|
PadLeft, PadRight
| Выполняет заполнение нужным числом пробелов в начале и в конце строки |
Trim, TrimStart, TrimEnd
| Удаляются пробелы в начале и в конце строки, либо только с одного конца |
ToCharArray
| Преобразование строки в массив символов |
Класс String не разрешает изменять существующие объекты. Для этой цели имеется другой класс - класс StringBuilder, который позволяет исправить данный недостаток. Этот класс принадлежит к изменяемым классам и его можно найти в пространстве имен System.Text.
Объекты этого класса объявляются с явным вызовом конструктора класса. Конструктор класса перегружен, и наряду с конструктором без параметров, создающим пустую строку, имеется набор конструкторов, которым можно передать две группы параметров:
StringBuilder.
StringBuilder.
Примеры конструкторов:
public StringBuilder(string str, int size). Параметр str задает строку для инициализации, size - размер объекта;
public StringBuilder(int cursize, int maxsize). Параметры cursize и maxsize задают начальный и максимальный размер объекта;
public StringBuilder(string str, int start, int len, int size). Параметры str, start, len задают строку инициализации, size - размер объекта.
Над строками этого класса определены (также как идля строк класса String) операции:
=);
==) и (!=);
[]).
Операция конкатенации (+) не определена над строками класса StringBuilder, ее роль играет метод Append, добавляющий новую строку в конец существующей.
Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. Однако методы интерфейса объявляются без указания модификатора доступа, и класс, наследующий интерфейс, обязан полностью реализовать все методы интерфейса. В этом - отличие от класса, наследующего абстрактный класс, где потомок может реализовать лишь некоторые методы родительского абстрактного класса, оставаясь абстрактным классом.
Интерфейс позволяет описывать некоторые желательные свойства, которыми могут обладать объекты разных классов.
Среди интерфейсов, встроенных в библиотеку базовых классов .NET, можно особо выделить такие как:
IEnumerable (для работы с наборами объектов, в т.ч. с использованием оператора foreach).
IClonable (копирование объектов).
IComparable (для сравнения и сортировки объектов).
Пространство имен System.Collections, предназначенное для работы с наборами объектов, поддерживает интерфейсы:
ICollection (определяет общие характеристики класса набора элементов).
IComparer, IDictionary (позволяет представлять содержимое объекта в виде пар имя-значение).
IDictionaryEnumerator (нумерация содержимого объекта, поддерживающего IDictionary).
IEnumerable, IEnumerator.
IHashCodeProvider (возвращает хэш-код с помощью выбранного алгоритма хэширования).
IList (обеспечивает методы добавления, удаления и индексирования элементов в списке объектов).
Visual Web Developer Express - это полнофункциональная среда разработки, предназначенная для создания веб-приложений ASP.NET, называемых "веб-узлами".
Visual Web Developer Express (VWDE) предоставляет в распоряжение веб-разработчика следующие функциональные возможности:
Visual Web Developer Express (VWDE) представляет собой удобную среду для построения веб-узлов и их публикации. Используя инструменты разработки VWDE, можно разрабатывать веб-узлы ASP.NET на собственном компьютере. В состав VWDE входит локальный веб-сервер, который обеспечивает все функции, необходимые для тестирования и отладки веб-узлов ASP.NET, и не требует установки сервера IIS.
В VWDE можно произвести предварительную компиляцию и развернуть веб-узел при помощи команды "Построить веб-узел" (Build Web Site). Команда "Построить веб-узел" запускает компилятор для всего веб-узла, а не только для файлов кода, и создает макет веб-узла, который можно развертывать уже на рабочем сервере.
Visual Web Developer Express предоставляет в распоряжение веб-разработчика целый набор шаблонов ASP.NET 2.0. По-сути - это готовые веб-узлы, которые можно использовать в качестве собственных веб-узлов с минимальными изменениями. Чтобы использовать шаблон, необходимо создать новый новый веб-узел и выбрать требуемый шаблон.
В VWDE можно создавать проекты, веб-узлы и отдельные файлы.
Для практического изучения примеров в данной лабораторной работе необходимо наличие установленного пакета Microsoft Visual Studio (версии не ранее 2003). В зависимости от установленной версии возможны несущественные отличия в интерфейсе среды при создании и работе с проектом консольного приложения.
Program.cs на языке C#:
В данной программе объявление using System дает возможность ссылаться на классы, которые находятся в пространстве имен System, так что их можно использовать, не добавляя "System." перед именем типа.
Пространство имен System содержит много полезных классов. Одним из них является и класс Console, который используется при создании консольных приложений.
Класс проекта - Program размещен в пространстве имен, имеющем по умолчанию то же самое имя (HelloWorldDemo), что и решение, содержащее в данном примере единственный проект.
Поскольку в C# нет глобальных функций, поэтому в данном примере объявляется класс Program, который содержит функцию static Main(), служащую начальной точкой выполнения программы. Функция Main может быть объявлена без параметров или с параметром, представляющий собой массив строк. Так как функция Main является точкой входа, она должна быть статической (static) функцией, т.е. она не связана с конкретным объектом класса, в котором объявлена.
Main следующую строку:
Console.WriteLine("Hello world!");
которая использует метод WriteLine класса Console для вывода строки "Hello world!".
static void Main(string[] args)
{
int[] ArInt = { 0, 9, 1, 8, 2, 7, 3, 6, 4, 5 };
Console.WriteLine("Array contains elements:");
foreach (int item in ArInt)
{
Console.Write("{0} ", item);
}
Console.WriteLine("");
}
После повторения шагов 3-4 получим следующее окно:
Следующие две программы демонстрируют, каким образом выполняется инициализация и работа с прямоугольными и ломаными массивами в C#.
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Прямоугольный многомерный массив
int[,]multMatr;
multMatr = new int[10,10];
// Заполнение массива 9 на 9:
for (int i = 1; i <= 9; i++)
for (int j = 1; j < 9; j++)
multMatr[i, j] = i * j;
// Вывод элементов многомерного массива
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
Console.Write(multMatr [i, j] + "\t");
}
Console.WriteLine();
}
}
}
В результат выполнения программы получим таблицу умножения следующего вида:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Ломаный многомерный массив из пяти внутренних массивов разного размера
int[][] JagArr = new int[10][];
// Инициализация генератора случайных чисел
Random rand = new Random();
// Динамическое создание ломаного массив
for (int i = 0; i < JagArr.Length; i++)
{
JagArr[i] = new int[i + rand.Next(10)];
}
// Вывод строк на консоль
// Каждый элемент по умолчанию имеет значение, равное
for (int i = 0; i < 10; i++)
{
// Свойство Length массива возвращает его размер
Console.Write("Length of row {0} is {1}:\t", i, JagArr[i].Length);
for (int j = 0; j < JagArr[i].Length; j++)
{
Console.Write(JagArr[i][j] + " ");
}
Console.WriteLine();
}
}
}
}
В результате выполнения программы получим следующую таблицу:
Свойства и методы класса Array.
Следующий пример демонстрирует использование некоторых из свойств и методов класса Array:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Массив символьных строк
string[] Brands = new string[]
{"Audi",
"BMW",
"Buick",
"Chevrolet",
"Citroen",
"Dodge",
"Ferrari",
"Fiat",
"Ford",
"Honda",
"Hyundai",
"Cherokee",
"Cherry",
"Lada",
"Lamborghini",
"Lincoln",
"Mazda",
"Mercedes",
"Mitsubishi",
"Nissan",
"Opel",
"Peugeot",
"Plymoth",
"Pontiac",
"Renault",
"Rover",
"Saab",
"Subaru",
"Suzuki",
"Toyota",
"Volkswagen",
"Volvo"};
// Вывод марок автомобилей в соответствии с порядком элементов в массиве
Console.WriteLine("Here is the array of car brands:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Сортировка элементов в обратном порядке
Array.Reverse(Brands);
// Вывод автомарок
Console.WriteLine("Here is the list once reversed:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Остаются только первый и последний
Console.WriteLine("Only two remain: ");
Array.Clear(Brands, 2, Brands.Length-2);
for (int i = 0; i < Brands.Length; i++)
{
Console.Write(Brands[i] + "\t\n");
}
}
}
}
Результат работы программы:
Использование класса StringBuilder
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
StringBuilder WordList = new StringBuilder("Каждый Охотник ");
WordList.Append("Желает Знать Где ");
Console.WriteLine(WordList);
WordList.Append("Сидит Фазан");
Console.WriteLine(WordList);
// Сделать все буквы прописными
string Spectrum = WordList.ToString().ToUpper();
Console.WriteLine(Spectrum);
}
}
}
Результат работы программы:
Использование класса ArrayList
Использование класса ArrayList из пространства имен System.Collections позволяет эффективно реализовать работу с массивами объектов, поскольку многие возможности, необходимые для этого реализованы изначально, в частности методы вставки, удаления и нумерации элементов.
Для использования возможностей ArrayList используется не обычное наследование, а модель включения в виде делегирования вызовов на выполнение различных действий классу производному от ArrayList:
public class NBooks : IEnumerable
{
// nbList - внутренний класс, который будет делать всю работу
private ArrayList nbList;
// Создаем объект класса nbList при помощи конструктора NBooks
public NBooks() {nbList = new ArrayList();}
// Реализуем нужные нам методы для приема вызовов извне и передачи их nbList
// Метод для вставки объекта NBook
public void AddNBook(NBook nb)
{ nbList.Add(nb); }
// Метод для удаления объекта NBook
public void RemoveNBook(int nbToRemove)
{ nbList.RemoveAt(nbToRemove); }
// Свойство, возвращающее количество объектов NBook
public int NBookCount
{ get { return nbList.Count; } }
// Метод для очистки объекта - удаления всех объектов NBook
public void ClearAllNBooks()
{ nbList.Clear(); }
// Метод, который отвечает на вопрос - есть ли уже в наборе такой объект NBook
public bool NBookIsPresent(NBook c)
{ return nbList.Contains(c); }
// Все, что связано с реализацией IEnumerator, перенаправляется в nbList
public IEnumerator GetEnumerator()
{ return nbList.GetEnumerator(); }
}
Реализация класса NBook и код программы, использующей класс NBooks представлены ниже.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace NBooks
{
public class NBook
{
// Конструктор класса NBook
public string Model;
public string CPU_model;
public int CPU_clock;
public int RAM_size;
public NBook(string mname, string CPU, int Clock, int RAM)
{
Model = mname;
CPU_model = CPU;
CPU_clock = Clock;
RAM_size = RAM;
}
}
class Program
{
static void Main(string[] args)
{
NBooks nbLot = new NBooks();
// Создание списка объектов NBook
nbLot.AddNBook( new NBook("ASUS A7Sn","Intel Core 2 Duo T8300", 2400, 2048));
nbLot.AddNBook( new NBook("Acer Aspire 5530G-803G25Mi","AMD Turion X2 Ultra ZM80", 2100, 3072));
nbLot.AddNBook( new NBook("Fujitsu Amilo Si 2636", "Intel Core 2 Duo T8300", 2400, 2048));
nbLot.AddNBook( new NBook("HP Pavilion tx2650er", "AMD Turion X2 Ultra ZM82", 2200, 4096));
// Выводим информацию о каждом объекте при помощи конструкции foreach
Console.WriteLine("You have {0} in the lot: \n", nbLot.NBookCount);
foreach (NBook nb in nbLot)
{
Console.WriteLine("Model: {0}", nb.Model);
Console.Write("CPU: {0}", nb.CPU_model);
Console.WriteLine(" {0} GHz", nb.CPU_clock);
Console.WriteLine("RAM: {0} GB\n", nb.RAM_size);
}
// Удаляем один из ноутбуков
nbLot.RemoveNBook(3);
Console.WriteLine("You have {0} in the lot.\n", nbLot.NBookCount);
// Добавляем еще один ноутбук и проверяем его наличие в наборе
NBook temp = new NBook("ASUS M51Ta", "AMD Turion™ X2 Ultra ZM84", 2300, 4096);
nbLot.AddNBook(temp);
if(nbLot.NBookIsPresent(temp))
Console.WriteLine(temp.Model + " is already in the lot.");
// Удалить все
nbLot.ClearAllNBooks();
Console.WriteLine("You have {0} in the lot.\n", nbLot.NBookCount);
}
}
}
Результат выполнения программы:
Table и перетащите его в окно с HTML кодом. В результате в HTML коде странице автоматически добавятся теги, описывающие пустую таблицу. Причем в режиме отображения "split" (задается выбором закладки в нижней части окна с кодом HTML) внизу появится окно дизайна с видом пустой таблицы.
<td> на <th> для того, чтобы сформировать "шапку" таблицы.
| № | Дисциплина | Семестр | Учебных часов |
|---|---|---|---|
| 1 | Математический анализ | 1 | 90 |
| 2 | Информатика | 1 | 72 |
| 3 | Философия | 3 | 72 |
| 4 | Информационные сети | 6 | 64 |
#subjects
font-family:" Times New Roman, Times, serif";
width:100%;
border-collapse :collapse;
#subjects td, #subjects th" значения категорий:
font-size:1em;
border:1px solid #98bf21;
padding:3px 7px 2px 7px;
"#subjects th" отдельно определите следующие значения:
font-size:1.1em;
text-align:left;
padding-top:5px;
padding-bottom:4px;
background-color:#A7C942;
color:#ffffff;
а для селектора "#subjects tr.alt td":
color:#000000;
background-color:#EAF2D3;
В итоге в окне HTML кода появится новая секция объявления списка стилей:
Id значение subjects:
Таким же образом для 2-й и 4-й строк таблицы задайте значение свойства class = "alt".
В результате в HTML коде будут автоматически добавлены идентификаторы (классы) задающие стиль элементов таблицы.
Table.html".
Требуется разработать приложение, которое по заданным значениям коэффициентов a,b и c квадратного уравнения (значения вводятся с клавиатуры пользователем) вычисляет и отображает на экране корни уравнения.
Для данного приложения потребуются следующие методы:
string Console.ReadLine() - чтение строки символов из входного потока.
double Convert.ToDouble(string) - преобразование строки символов в число с плавающей запятой двойной точности.
double Math.Sqrt(double) - извлечение квадратного корня числа.
Для изучения приводимых в лабораторной работе примеров необходимо создать в Microsoft Visual Studio проект консольного приложения и описать класс Program, используя приводимый в примерах код.
IndexOf(string findThisString) для строковых элементов массива. Метод возвращает позицию начала искомой подстроки от начала строки, либо значение -1 при отсутствии соответствия.
Table.html должна быть только ссылка на внешний файл. Проверьте, какие изменения произойдут при этом в режиме работы с панелью инструментов разработчика в IE9.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.