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

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: 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


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