louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

Изучаем C Sharp (C#)

Программирование на C Sharp (C#) с нуля

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Введение в классы - Конструкторы (часть 4)

ИНИЦИАЛИЗАЦИЯ КЛАССОВ И КОНСТРУКТОРЫ


Одно из величайших преимуществ языков ООП, таких как С#, состоит в том, что вы можете определять специальные методы, вызываемые всякий раз при создании экземпляра класса. Эти методы называются конструкторами (constructors). C# вводит в употребление новый тип конструкторов— статические (static constructors), с которыми вы познакомитесь ниже в подразделе «Константы и неизменные поля».
Гарантия инициализации объекта должным образом, прежде чем он будет использован,— ключевая выгода от конструктора. Когда пользователь создает экземпляр объекта, вызывается его конструктор, который должен вернуть управление до того, как пользователь сможет выполнить над объектом другое действие. Именно это помогает обеспечивать целостность объекта и делать написание приложений на объектно-ориентированных языках гораздо надежнее.
Но как назвать конструктор, чтобы компилятор знал, что его надо вызывать при создании экземпляра объекта? Разработчики С# последовали в этом вопросе за разработчиками C++ и провозгласили, что у конструкторов в С# должно быть то же имя, что и у самого класса. Вот простой класс с таким же простым конструктором:


using System;

class ConstructorApp
{
    ConstructorApp()
    {
        Console.WriteLine("Конструктор");
    }
    public static void Main()
    {
        ConstructorApp App = new ConstructorApp();
    }
}



Значений конструкторы не возвращают. При попытке использовать с конструктором в качестве префикса имя типа компилятор сообщит об ошибке, пояснив, что вы не можете определять члены с теми же именами, что у включающего их типа.
Следует обратить внимание и на способ создания экземпляров объектов в С#. Это делается при помощи ключевого слова new:
<класс> <объект> = new <класс>(аргументы конструктора)
Кто программировал на C++, обратите на это особое внимание. В C++ вы могли создавать экземпляр объекта двумя способами: объявлять его в стеке, скажем, так:
//Код на Си- Создает экземпляр CMyCleas в стеке
CMyClass myClass;
или создавать копию объекта в свободной памяти (или в куче), используя ключевое слово C++ new:
//Код на С+-. Создает экземпляр CmyCiass в куче.
CMyClass myClass = new CmyClass();
Экземпляры объектов на С# формируются иначе, что и сбивает с толку новичков в разработке на С#. Причина путаницы в том, что для создания объектов оба языка используют одни и те же ключевые слова. Хотя с помощью ключевого слова new в C++ можно указать, где именно будет создаваться объект, место его построения на С# зависит от типа объекта, экземпляр которого создается. Как вы уже знаете, ссылочные типы создаются в куче, а размерные — в стеке. Поэтому ключевое слово new позволяет делать новые экземпляры класса, но не определяет место создания объекта.
Хотя можно сказать, что приведенный ниже код на С# не содержит ошибок, он делает совсем не то, что может подумать разработчик на C++:
MyClass myClass;
На C++ он создаст в стеке экземпляр MyClass. Как сказано выше, на С# вы можете создавать объекты, только используя ключевое слово new.
Поэтому на С# эта строка лишь объявляет переменную myClass как переменную типа MyClass, но не создает экземпляр объекта.
Примером служит следующая программа, при компиляции которой компилятор С# предупредит, что объявленная в приложении переменная ни разу не используется:


using System;
class ConstrctorApp
{
    ConstrctorApp()
    {
        Console.WriteLine("конструктор");
    }
    public static void Main()
    {
        ConstrctorApp App = new ConstrctorApp();
    }
}



Поэтому, объявляя объект, создайте где-нибудь в программе его экземпляр с помощью ключевого слова new:
Constructor App =new ConstructorApp() ;
Зачем объявлять объект, не создавая его экземпляров? Объекты объявляются перед использованием или созданием их экземпляров с помощью new, если вы объявляете один класс внутри другого. Такая вложенность классов называется включение (containment) или агрегирование (aggregation).

Предыдущая стр.    Оглавление    Следующая стр.
Средняя оценка: (3 - 3 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии

Комментирует Serval 25.03.2010 11:28:29


Комментирует Serval 25.03.2010 11:28:46


Комментирует Zumazuma 05.02.2011 21:31:00


Комментирует Mescaline 19.12.2011 16:46:51




Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!

  • системы GPS trimble превосходят аналоги