ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

acer ado.net amd asp.net c sharp c# cms css exceptions google html ipad iphone it бизнес javascript jquery linq microsoft mysql net nokia nokia lumia samsung seo silverlight sql surface tsql windows 8 windows blue windows phone windows rt xna безопасность библиотека вопросы на собеседовании интересные проекты интернет интернет магазин исключения книга книги компьютерная безопасность компьютерные игры контролы курсы по программированию логированние исключений мобильные приложения монетизация сайтов наушники новости новости it новости microsoft новости интернет новости технологий ноутбук ноутбуки обработка исключений оптимизация острова периферия планшет планшеты поддержка сайтов поисковое продвижение программы продвижение продвижение сайта продвижение сайтов рабство разработка игр разработка сайтов раскрутка сайта рекламные технологии смартфон смартфоны собеседование создание сайтов средства разработки туризм фриланс хостинг яндекс
  << Предыдущий пост       Следующий пост >>  
От: ironMan
9. августа 2011 03:09

Во всех конструкторах С#, кроме System.Object, конструкторы базового класса вызываются прямо перед исполнением первой строки конструктора. Эти инициализаторы конструкторов позволяют задавать класс и подлежащий вызову конструктор. Они бывают двух видов. Инициализатор в виде base(...) активизирует конструктор базового класса текущего класса. Инициализатор в виде this(...) позволяет текущему базовому классу вызвать другой конструктор, определенный в нем самом. Это полезно, когда вы перегрузили несколько конструкторов и хотите быть уверенными, что всегда будет вызван конструктор по умолчанию. О перегруженных методах смотрите главу 10, здесь же мы приведем их краткое определение: перегруженными называются два и более метод с одинаковым именем, но с различными списками аргументов. Чтобы увидеть порядок событий в действии, обратите внимание на следующий код: он сначала исполнит конструктор класса А, а затем конструктор класса В:



using System;

class A
{
public А()
{
Console.WriteLine("A");
}
}

class В: А
{
public B() ; base ()
{
Console.WriteLine("B");
}
}

class BaseDefaultInitializerApp
{
public static void Main()
{
В b = new B() ;
}
}



Этот код — функциональный эквивалент следующего, где производится явный вызов конструктора базового класса:



using System;

class A
{
public A()
{
Console.WriteLine("A");
}
}

class В: А
{
public B()
{
Console.WriteLine("B");
}
}

class DefaultlnitializerApp
{
public static void Main()
{
В b = new B();
}
}



А теперь рассмотрим более удачный пример ситуации, когда выгодно использовать инициализаторы конструкторов. У нас опять два класса: А и В. На этот раз у класса А два конструктора, один из них не требует аргументов, а другой принимает аргумент типа int. У класса В один конструктор, принимающий аргумент типа int. При создании класса В возникает проблема. Если запустить следующий код, будет вызван конструктор класса А, не принимающий аргументов:



using System;

class A
{
public A()
{
Console.WriteLine("A");
}

public A(int foo)
{
Console.WriteLine("A = {0}", foo);
}
}

class В: А
{
public B(int foo)
{
Console.WriteLine("В = {0}", foo);
}
}

class Derivedlnitializer1App
{
public static void Main()
{
В b = new B(42);
}
}



Как же гарантировать, что будет вызван именно нужный конструктор класса А ? Явно указав компилятору, какой конструктор в инициализаторе должен быть вызван первым, скажем, так:



using System;

class A
{
public A()
{
Console.WriteLine("A");
}
public A(int foo)
{
Console.WriteLine("A - {0}", foo);
}
}

class В: А
{
public B(int foo): base (foo)
{
Console.WriteLine("B = {0}", foo)
}
}

class DerivedInitializer2App
{
public static void Main()
{
В b = new В(42);
}
}


( отрывок из книги В. В. Лабор "Си Шарп: Создание приложений для Windows" )


В Наличии, Apple iphone 5 32gb. Iphone 3GS 32gb Black 23 Apple iphone 5 32gb.

Похожие записи


Виртуальные свойства в C#
Свойства, как и методы, могут быть перегружены в производных классах. Для свойств также могут задаваться модификаторы virtual, override или abstract. Подробно о наследовании говорилось в главе «Методы», сейчас я лишь хочу еще раз привести подробный пример использования механизма виртуализации с применением свойств: [code:c#] using System; enum COLORS { RE...

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

Многопоточный HTTP сервер на C#
Оригинал статьи здесь: Многопоточный сервер на C# за 15 минут Автор (на хабре): ertaquo C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий