Предварительные
Download
1 / 80

Предварительные требования Изложение материала рассчитано на то что вы уже знаете: - PowerPoint PPT Presentation


  • 145 Views
  • Uploaded on

Предварительные требования Изложение материала рассчитано на то что вы уже знаете: Основы программирования Переменные, директивы, функции, циклы, и т.п. Объектно-ориентированного программирования Классы, наследование, полиморфизм,члены классов, и т.п. Цели создания C#.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Предварительные требования Изложение материала рассчитано на то что вы уже знаете:' - roscoe


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Предварительныетребования

Изложение материала рассчитано на то что вы

уже знаете:

Основыпрограммирования

Переменные, директивы, функции, циклы, и т.п.

Объектно-ориентированного программирования

Классы, наследование, полиморфизм,члены классов, и т.п.


Цели создания C#

  • Компоненто-ориентированность

  • Все описывается объектами

  • Надёжное и безотказное ПО

  • Экономия капиталовложений


Цели создания C#Компоненто-ориентированность

C# первый “Компоненто-ориентированный” язык в

семействе C/C++

Что такое компонент?

  • Независимый модуль который может многократно

  • использоваться и отдельно устанавливаться

  • Более грубая чем объект структура

  • (объекты это языко-зависимые конструкции)

  • Могут включать несколько классов

  • Часто не зависят от языка программирования

  • Как правило, разработчик и пользователь компонента не

  • знают друг друга, работают в разных компаниях, и

  • пользуются разными языками


Цели создания C#Компоненто-ориентированность

  • Концепция разделения на компоненты

  • Свойства, методы, события

  • Атрибуты времени разработки и времени

  • исполнения

  • Интегрированная документация с использованием

  • XML

  • Принцип размещения кода в одном месте

  • Нет заголовочных файлов, файлов IDL, и т.п.

  • Можно встраивать в ASP страницы


Цели создания C#Всё описывается объектами

Традиционный взгляд

  • C++: Простые типы реализуются сами по

    себе без привлечения объектов

  • Smalltalk, Lisp: Простые типы реализованы как

    объекты, но за счёт потери производительности

    C# использует единое представление типов

    без потери производительности

  • Это упрощает конструкцию системы

  • Улучшенная расширяемость

  • Новые простые типы: Decimal, SQL…

  • Коллекции, и т.п., возможны для всех типов


Цели создания C#Корректное и надёжноепрограммное обеспечение

  • Сборка мусора

    Отсутствуют утечки памяти и неверные указатели

  • Обработка исключений (Exceptions)

  • Безопасность использования типов

    Нет неинициализированных переменных, нет потенциальноопасных преобразований типов

  • Избегаются распространенные ошибки

    Например if (x = y) ...

  • One-stop programming

    Меньше перемещающихся частей программы


  • Описание класса в С# должно содержать встроенное (inline) описание всех методов — в этом языке заголовочных файлов не бывает. Благодаря этому правилу разработчики классов могут создавать высоко мобильный код, что является одной из ключевых концепций среды .NET.

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

  • Такой подход — универсальное программирование ("one-stopprogramming"-) — позволяет, например, перебросить весь класс на страницу ActiveServerPages (ASP), и он будет функционировать так, будто был скомпилирован для настольного приложения Windows!


Цели создания содержать встроенное (C#Сохраняет ваши вложения

  • Наследство C++

    Пространства имён, указатели (в небезопасном

    (unsafe) коде),беззнаковые типы данных, и т.п.

  • Способность к взаимодействию

    C# взаимодействует с XML, SOAP, COM, DLLs, илюбым языком .NET Framework


Типы содержать встроенное (Обзор

  • Программа C# это коллекция типов

    Классы, структуры, перечисляемые типы,

    интерфейсы, делегаты

  • C# имеет набор предопределённых типов

    Например int, byte, char, string, object, …

  • Вы можете создавать свои собственные типы

  • Все данные и код определяются внутри типов

    Нет глобальных переменных и глобальных

    функций


Типы содержать встроенное (Обзор

Типы содержат:

  • Данные

    • Поля, константы, массивы

    • События

  • Функции

    • Методы, операторы, конструкторы, деструкторы

    • Свойства, индексаторы

  • Другие типы

    • Классы, структуры, перечисляемые типы, интерфейсы,делегаты


Типы содержать встроенное (Обзор

  • Можно создавать экземпляры типов…

    • …и затем использовать их: вызывать методы,

      считывать и присваивать свойства, и т.п.

  • Можно преобразовывать один тип в другой

    • Прямо и косвенно

  • Типы организуются в

    • Пространства имён, файлы, сборки

  • Есть две категории типов:

    размерные (value) и ссылочные (reference)

  • Типы имеют иерархию


Типы содержать встроенное (Унифицированная система типов

  • Размерные типы

    • Непосредственно содержат данные

    • Не могут быть пустыми (null)

  • Ссылочные типы

    • Содержат ссылки на объект

    • Могут быть пустыми (null)

  • inti = 123;

  • string s = "Hello world“;


Типы содержать встроенное (Унифицированная система типов

  • Размерные типы

    • Простые inti; float x;

    • Перечисляемые enum State { Off, On }

    • Структуры struct Point {intx,y;}

  • Ссылочные типы

    • Корневые object

    • Строки string

    • Классы class Foo: Bar, IFoo {...}

    • Интерфейсы interface IFoo: IBar {...}

    • Массивы string[] a = new string[10];

    • Делегаты delegate void Empty();


Типы содержать встроенное (Унифицированная система типов


Типы содержать встроенное (Унифицированная система типов

  • Преимущества размерных типов

    • Не размещаются в куче, меньше работы для

      Сборщика мусора

    • Более эффективное использование памяти

    • Короче путь указывающий на данные

    • Унифицированная система типов

      • Нет разделения на простые типы и объекты


Преобразования типов содержать встроенное (

  • Неявное преобразование

    • Происходит автоматически

    • Гарантированно выполняется успешно

    • Не теряется информация (точность)

  • Явное преобразование

    • Требует приведения типа

    • Может не сработать

    • Информация (точность) может быть потеряна

  • Оба явное и неявное преобразования

    должны быть заданы пользователем


Преобразования типов содержать встроенное (

  • int x = 123456;

  • long y = x; // косвенное

  • short z = (short)x; // прямое

  • double d = 1.2345678901234;

  • float f = (float)d; // прямое

  • long l = (long)d; // прямое


Типы содержать встроенное (Унифицированная система типов

  • Всё описывается объектами

    • Все типы наследуются от объекта object

    • Любые данные могут быть сохранены, переданы, и обработаны без дополнительной работы


Типы содержать встроенное (Унифицированная система типов

  • Полиморфизм

    Возможность выполнять операции над объектом без знания точного типа этого объекта

    void Poly(object o) {

    Console.WriteLine(o.ToString());

    }

    Poly(42);

    Poly(“abcd”);

    Poly(12.345678901234m);

    Poly(new Point(23,45));


Типы содержать встроенное (Унифицированная система типов

  • Вопрос: Как применяется полиморфизм к

    работе с размерными и ссылочными типами?

    Как переменная типа int (размерный тип)

    преобразуется в object (ссылочный тип)?

  • Ответ: Упаковка (boxing)!

    Упаковываются только размерные типы

    Ссылочные типы не упаковываются


Типы содержать встроенное (Унифицированная система типов

Упаковка

  • Копирование переменной размерного типа в

    переменную ссылочного типа (object)

  • Каждому размерному типу соответствует

    “скрытый” ссылочный тип

  • Отметим, что из переменой размерного типа

    создаётся новая переменная ссылочного типа

    • Нет простой передачи указателя на переменную

  • Размерный тип неявно преобразуется в объект,

    ссылочный тип

    • Восходящее преобразование типов ( “upcast”)


Типы содержать встроенное (Унифицированная система типов

Распаковка (unboxing)

  • Операция обратная упаковке

  • Копирует упакованное значение

    • Копирует из ссылочного типа в размерный

  • Требует явного преобразования типов

    • Может не сработать (как и все явные преобразования)

    • Нисходящее преобразование типов (“down cast”)


Типы содержать встроенное (Унифицированная система типов

Упаковка и распаковка

  • int i = 123;//i->123

  • object o = i; //o->System.Int32->123

  • int j = (int)o; //j->123


Типы содержать встроенное (Унифицированная система типов

Преимущества упаковки

  • Распространяет полиморфизм на все классы

  • Классы коллекций работают со всеми типами

  • Отпадает необходимость в классах оболочках

  • Заменяет тип Variant в OLE Automation

    Недостатки упаковки

  • Снижается производительность


Типы содержать встроенное (Предопределённые типы

  • Размерные

    • Целые типы

    • Вещественные типы

    • Десятичный

    • Логический

    • Символ

  • Ссылочные

    • Объект

    • Строка


Предопределённые типы содержать встроенное (Типы значений

  • Всё это предопределённые структуры

  • Беззнаковые byte, ushort, uint, ulong

  • Знаковые sbyte, short, int, long

  • Логический bool

  • Символ char

  • Вещественные float, double, decimal


Предопределённые типы содержать встроенное (Целые типы


Предопределённые типы содержать встроенное (Вещественные типы

  • Согласно спецификации IEEE 754

  • Поддержка ± 0, ± Бесконечность, NaN


Decimal
Предопределённые типы содержать встроенное (decimal (десятичный)

  • 128 бит

  • 96 битовое значение масштабируемоестепенью 10

  • Более точное представление десятичныхзначений

  • Не поддерживает нули со знаками,бесконечности и NaN


Decimal1
Предопределённые типы содержать встроенное (decimal (десятичный)

  • Целый тип может быть неявно преобразован

    в десятичный

  • Преобразование между десятичным и

    вещественными типами должно быть явно

    указано, так как возможна потеря точности

  • s * m * 10e

  • s = 1 или –1

  • 0 ≤ m ≤ 296

  • -28 ≤ e ≤ 0


Предопределённые типы содержать встроенное (Литеры для целых чисел

Целые числа можно задавать в десятичной

или шестнадцатеричной нотации

  • U или u: uintили ulong

  • L или l: long или ulong

  • UL или ul: ulong

    123 // Десятичное

    0x7B // Шестнадцатеричное

    123U // Беззнаковое

    123ul // Беззнаковое длинное целое

    123L // Длинное целое


Предопределённые типы содержать встроенное (Литеры для вещественных чисел

  • F или f: float

  • D или d: double

  • M или m: decimal

  • 123f // Float

  • 123D // Double

  • 123.456m // Decimal

  • 1.23e2f // Float

  • 12.3E1M // Decimal


Предопределённые типы содержать встроенное (bool(Логический)

  • Для представления логических значений

    true и false

  • Нельзя использовать 1 и 0 в качестве

    логических значений

  • Нет стандартного преобразования между bool и другими типами


Предопределённые типы содержать встроенное (char (Символ)

  • Для представления символов Unicode

  • Литеры

    • ‘A’ // Простой символ

    • ‘\u0041’ // Unicode

    • ‘\x0041’ // Шестнадцатеричное //беззнаковоекороткое целое

    • ‘\n’ // Символ Escape //последовательности


Предопределённые типы содержать встроенное (char (Символ)

  • Некоторые символы Esc последовательности

    Символ Описание Значение

    \n Новая строка 0x000A

    \r Возврат каретки 0x000D

    \t Табуляция 0x0009

    \0 Ноль 0x0000

    \\ Обратная косая черта 0x005C

    \” Двойная кавычка 0x0022

    \’ Одинарная кавычка 0x0027


Предопределённые типы содержать встроенное (Типы ссылок

  • Строка символов string

  • Корневой тип object


Object
Предопределённые типы содержать встроенное (object

Корневой объект в иерархии

  • Дополнительно к данным резервируется

    • 0 байт для типов значений

    • 8 для типов ссылок

  • В действительности ссылка (не объект) занимает 4 байта


Object1
Предопределённые типы содержать встроенное (Внешние методы object

  • public bool Equals(object)

  • protected void Finalize()

  • public int GetHashCode()

  • public System.Type GetType()

  • protected object MemberwiseClone()

  • public void Object()

  • public string ToString()


String
Предопределённые типы содержать встроенное (string (строка)

  • Непрерывная последовательность символов

    в формате Unicode

  • Ссылочный тип

    string s = “I am a string”;


String1
Предопределённые типы содержать встроенное (string (строка)

  • В обычных строках можно использовать esc

    последовательности.

    string s1= “\\\\server\\fileshare\\filename.cs”;

  • В строках начинающихся с @:

    Большинство Esc последовательностей

    игнорируется

    Исключение для “”

    Допускается перенос на следующую строку

  • string s2 = @”\\server\fileshare\filename.cs”;


Типы содержать встроенное (Типы определяемые пользователем

  • Перечисление enum

  • Размерный тип struct

  • Ссылочный тип class

  • Массив int[], string[]

  • Интерфейс interface

  • Указатель на функцию delegate


Типы содержать встроенное (Перечисления

  • Перечисление задаёт имя типа для группы

    связанных по смыслу символических констант

  • Выбор значения из группы должен быть известен на этапе компилирования

  • Сильное типизирование

    • Не допускаются неявные преобразования в/из целого типа

    • Разрешено явное преобразование

    • Операторы: +, -, ++, --, &, |, ^, ~, …

  • Можно указать внутренний тип

    • byte, sbyte, short, ushort, int, uint, long, ulong


Типы содержать встроенное (Перечисления

enum Color: byte {

Red = 1,

Green = 2,

Blue = 4,

Black = 0,

White = Red | Green | Blue }

Color c = Color.Black;

Console.WriteLine(c); // 0

Console.WriteLine(c.Format()); // Black


Типы содержать встроенное (Перечисления

  • Все перечисляемые типы происходят от

  • System.Enum

  • Он обеспечивает методы для

    • Определения внутреннего типа

    • Проверки возможно ли указанное значение

    • Инициализации из строковой константы

    • Извлечения всех значений типа


Типы содержать встроенное (Массивы

  • Массивы используются для сохранения

    группы элементов определённого типа в

    непрерывном блоке памяти

  • Массивы это ссылочные типы

  • Происходят от System.Array

  • Индекс с нуля

  • Могут быть многоразмерными

    • Массивы знают свою длину и размерность

  • Проверка выхода за границы массива


Типы содержать встроенное (Массивы

  • Объявление

    int[] primes;

  • Размещение

    int[] primes = new int[9];

  • Инициализация

    int[] prime = new int[] {1,2,3,5,7,11,13,17,19};

    int[] prime = {1,2,3,5,7,11,13,17,19};

  • Доступ к массиву и присвоение значений

    prime2[i] = prime[i];

  • Перебор элементов

    foreach (int i in prime) Console.WriteLine(i);


Типы содержать встроенное (Массивы

  • Многоразмерные массивы

    • Прямоугольные

      • int[,] matR = new int[2,3];

      • Можно инициализировать при объявлении

      • int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} };

    • Неопределённой формы

      • Массив массивов

      • int[][] matJ = new int[2][];

      • Следует инициализировать программно


Типы содержать встроенное (Интерфейсы

  • Интерфейс определяет контакт

    • Содержит методы, свойства, индексаторы, события

    • Любой класс или структура реализующая интерфейс должнаподдерживать все его составляющие

  • Интерфейсы обеспечивают полиморфизм

    • Многие классы и структуры могут реализовывать одинопределённый интерфейс

  • Не содержат реализации

    • Должны быть реализованы классом или структурой


Типы содержать встроенное (Классы

  • Определяемый пользователем ссылочный

    тип

  • Аналогичен классам C++ и Java

  • Наследование только от одного класса

  • Наследование нескольких интерфейсов


Типы содержать встроенное (Классы

  • Члены класса

    • Константы, поля, методы, операторы,

      конструкторы, деструкторы

    • Свойства, индексаторы, события

    • Статические члены и члены экземпляра

  • Доступ к членам класса

    • private, protected, public, internal,

      protected internal

      • По умолчанию private

  • Экземпляр класса создаётся оператором new


Типы содержать встроенное (Структуры

  • Похожи на классы, но

    • Размерный тип, определяется пользователем

    • Всегда наследуется от типа object

  • Идеален для небольших объектов

    • Определяемые пользователем “простые” типы

      • Комплексное число, точка, прямоугольник, цвет


Типы содержать встроенное (Структуры

  • Могут наследовать несколько интерфейсов

  • Те же члены что и в классе

  • Доступ к членам структуры

    • internal, public, private

  • Экземпляры создаются оператором new


Типы содержать встроенное (Делегаты

  • Делегат это ссылочный тип который

    определяет метод

  • Экземпляр делегата может содержать один

    или несколько методов

    • Объектно-ориентированный указатель на

      функцию

  • Основа для обработки событий


Структура программы содержать встроенное (Обзор

  • Организация типов

  • Пространства имён

  • Метод Main

  • Синтаксис


Структура программы содержать встроенное (Организация типов

  • Физическая организация

    • Типы определяются в файлах

    • Файлы компилируются в модули

    • Модули группируются в сборки

МОДУЛЬ

ФАЙЛ

СБОРКА

ТИП


Структура программы содержать встроенное (Организация типов

  • Типы определяются в файлах

  • Файл может содержать несколько типов

  • Каждый тип определяется в одном файле

  • Файлы компилируются в модули

  • Модуль это DLL или EXE

  • Модуль может содержать несколько файлов

  • Модули группируются в сборки

  • Сборки могут содержать несколько модулей

  • Часто соотношение модулей и сборок 1:1


Структура программы содержать встроенное (Пространства имён

  • Пространства имён позволяют определять

    уникальные типы

  • Обеспечивают логическую организацию типов

  • Пространство имён может располагаться в

    нескольких сборках

  • Пространства имён могут быть вложенными

  • Пространства имён не зависят от файловой

    структуры (как в Java)

  • Полное имя типа включает все пространства имён в которые он входит


Структура программы содержать встроенное (Пространства имён

namespace N1 { // N1

class C1 { // N1.C1

class C2 { // N1.C1.C2

}}

namespace N2 { // N1.N2

class C2 {// N1.N2.C2

}}

}


Структура программы содержать встроенное (Пространства имён

  • Директива using позволяет использовать

    типы без указания полного имени

  • Всегда можно использовать полное имя

    using N1;

    C1 a; // N1. неявно

    N1.C1 b; // полное имя

    C2 c; // Ошибка! C2 не определён

    N1.N2.C2 d; // Один из классов C2

    C1.C2 e; // Другой


Структура программы содержать встроенное (Пространства имён

  • Директива using также позволяет создавать

    Псевдонимы

    using C1 = N1.N2.C1;

    using N2 = N1.N2;

    C1 a; // Ссылка на N1.N2.C1

    N2.C1 b; // Ссылка на N1.N2.C1


Структура программы содержать встроенное (Метод Main

  • Выполнение начинается со статического

    метода Main()

  • Может быть только один метод с одним из

    нижеуказанных интерфейсов

  • static void Main()

  • static int Main()

  • static void Main(string[] args)

  • static int Main(string[] args)


Структура программы содержать встроенное (Синтаксис

  • Идентификаторы

    • Имена типов, методов, полей, и т.п.

    • Должно быть целое слово – без пробелов

    • Содержит символы Unicode

    • Начинается с буквы или подчёркивания

    • Чувствителен к регистру

    • Не должен совпадать с ключевым словом

    • Кроме имеющих префикс @


Переменные и константы содержать встроенное (

Переменные и константы ‘видимы’ от места

Объявления до конца блока

В пределах ‘видимости’ переменной или

константы объявление другой переменной

или константы с тем же именем является

ошибкой

{

int x;

{

int x; // Error: can’t hide variable x

}}


Переменные содержать встроенное (

  • Перед использованием переменной ей

    следует присвоить значение

  • Автоматическое присвоение значений

    используется для статических полей, полей

    экземпляров классов и элементов массивов

    void Foo() {

    string s;

    Console.WriteLine(s); // Ошибка

    }


Оператор содержать встроенное (goto и метки

goto может использоваться для передачи

управления внутри или за пределы блока, но

не во включённый блок

Пример использования:


static void Find(int value, int[,] values, содержать встроенное (

out int row, out int col)

{

int i, j;

for (i = 0; i < values.GetLength(0); i++)

for (j = 0; j < values.GetLength(1); j++)

if (values[i, j] == value) goto found;

throw new InvalidOperationException(“Не найдено");

found:

row = i; col = j;

}


Switch
Оператор содержать встроенное (switch

  • Может делать ветвление по любому

    предопределенному типу (включая string) и enum

    • Пользовательские типы должны поддерживать неявное преобразование к этим типам

  • Необходимо явно указать как закончить выбор

    • директивой break, goto case, goto label, return,

      throw или continue

    • Это устраняет ошибку перехода к следующему выбору


int Test(string label) { содержать встроенное (

int result;

switch(label) {

case null:

goto case “runner-up”;

case “fastest”:

case “winner”:

result = 1; break;

case “runner-up”:

result = 2; break;

default:result = 0;

}

return result;}


Foreach
Оператор содержать встроенное (foreach

  • Итерация массивов

    public static void Main(string[] args) {

    foreach (string s in args)

    Console.WriteLine(s);

    }


Foreach1
Оператор содержать встроенное (foreach

  • Итерация пользовательских коллекций

  • Создаётся реализацией интерфейса

    Ienumerable

    foreach (Customer c in customers.OrderBy("name")) {

    if (c.Orders.Count != 0) {

    ...

    }

    }


Обработка исключений содержать встроенное (

  • Исключения это механизм C# для обработки

    неожиданно возникающих ошибок

  • Лучше чем возвращаемые значения статуса

    операции

    • Их нельзя игнорировать

    • Не нужно обрабатывать их в той точке где онивозникли

    • Могут использоваться даже если нет

      возвращаемого значения (например доступ к

      свойству)

    • Имеется стандартная обработка исключений


Обработка исключений содержать встроенное (

try...catch...finally

  • Блок try содержит код который может

    привести к исключению

  • Блок catch обрабатывает исключение

    • Может быть несколько блоков catch для обработкиразных типов исключений

  • Блок finally содержит код который

    исполняется всегда

    • Для выхода из блока finally нельзя использоватьдирективы перехода (такие как goto)


Обработка исключений содержать встроенное (

  • Директива throw вызывает исключение

  • Исключение представлено экземпляром класса System.Exception или его наследника

    • Содержит информацию о исключении

    • Свойства

      • Message

      • StackTrace

      • InnerException

  • Вы можете повторно вызвать исключение, илиперехватить одно исключение и вызвать другое


Обработка исключений содержать встроенное (

try {

Console.WriteLine("try");

throw new Exception(“message”);}

catch (ArgumentNullException e) {

Console.WriteLine(“caught null argument");}

catch {

Console.WriteLine("catch");}

finally {

Console.WriteLine("finally");}


Синхронизация содержать встроенное (

  • Многопоточные приложения нуждаются в

    синхронизации для обеспечения доступа к

    общим данным

  • Необходимо предотвратить повреждение данных

  • Директива lock использует экземпляр

    класса для обеспечения взаимоисключения

  • Только одна директива lock может получить

    доступ к одному экземпляру


Синхронизация содержать встроенное (

public class CheckingAccount {

decimal balance;

public void Deposit(decimal amount) {

lock (this) {

balance += amount;}}

public void Withdraw(decimal amount) {

lock (this) {

balance -= amount;}}

}


Using
Директива содержать встроенное (using

  • C# применяет автоматическое управление

    памятью (сборка мусора)

    • Устраняется большинство проблем управленияпамятью

  • Однако, это приводит к неопределённости

    при завершении работы

    • Не гарантируется вызываются ли и если

      вызываются то когда деструкторы объектов


Using1
Директива содержать встроенное (using

  • Объекты, которые должны быть

    деинициализированы после использования должныреализовывать интерфейс System.IDisposable

    • Один метод: Dispose()

  • Директива using позволяет вам создать экземпляркласса, использовать его, и затем быть уверенным втом что метод Dispose вызван при окончанииработы

  • Dispose гарантированно вызывается


public class MyResource : IDisposable { содержать встроенное (

public void MyResource() {

// захватываем ресурс}

public void Dispose() {

// освобождаем ресурс}

public void DoSomething() {

…}

}

using (MyResource r = new MyResource()) {

r.DoSomething();

} //вызывается r.Dispose()


Дополнительные ресурсы содержать встроенное (

  • http://msdn.microsoft.com

  • http://windows.oreilly.com/news/hejlsberg_0800.html

  • http://www.csharphelp.com/

  • http://www.csharp-station.com/

  • http://www.csharpindex.com/

  • http://msdn.microsoft.com/msdnmag/issues/0900/csharp/csharp.asp

  • http://www.hitmill.com/programming/dotNET/csharp.html

  • http://www.c-sharpcorner.com/

  • http://msdn.microsoft.com/library/default.asp?URL=/libr

    ary/dotnet/csspec/vclrfcsharpspec_Start.htm


ad