Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Конструкторы экземпляров

Конструкторы экземпляров используется для создания и инициализации экземпляров. Конструктор класса вызывается при создании нового объекта, например:

------

Примечание.

Следует пояснить, что этот класс содержит открытые члены данных. Такой подход не рекомендуется использовать на практике, поскольку в этом случае любой метод в любом месте программы получает неограниченный и неконтролируемый доступ к внутренней работе объекта. Члены данных обычно должны быть закрытыми, а доступ к ним должен осуществляться только посредством методов и свойства класса.

Этот конструктор вызывается каждый раз при создании объекта на базе класса CoOrds. Такой конструктор без аргументов называется конструктором по умолчанию. Зачастую такие конструкторы используются для предоставления дополнительных конструкторов. Например, можно добавить конструктор в класс CoOrds, позволяющий указывать начальные значения для членов данных:

-----

Это позволяет создавать объекты CoOrd с начальными значениями по умолчанию или с другими начальными значениями:

CoOrds p1 = new CoOrds();

CoOrds p2 = new CoOrds(5, 3);

If a class does not have a default constructor, one is automatically generated and default values are used to initialize the object fields, for example, an int is initialized to 0. Therefore, because the CoOrds class default constructor initializes all data members to zero, it can be removed altogether without changing how the class works. A complete example using multiple constructors is provided in Example 1 later in this topic, and an example of an automatically generated constructor is provided in Example 2.

Instance constructors can also be used to call the instance constructors of base classes. The class constructor can invoke the constructor of the base class through the initializer, as follows:

class Circle : Shape

{

public Circle(double radius)

: base(radius, 0)

{

}

}

In this example, the Circle class passes values representing radius and height to the constructor provided by Shape from which Circle is derived. A complete example using Shape and Circle appears in this topic as Example 3.

Если у класса нет конструктора по умолчанию, такой конструктор создается автоматически, а для инициализации полей объектов используются значения по умолчанию, int инициализируется со значением 0. Следовательно, поскольку конструктор по умолчанию класса CoOrds инициализирует все члены данных с нулевыми значениями, его можно удалить, при этом порядок работы класса не изменится. Полный пример использования нескольких конструкторов см. в данном разделе в примере 1; пример автоматически созданного конструктора см. в примере 2.

Конструкторы экземпляров также можно использовать для вызова конструкторов экземпляров базового класса. Конструктор класса может вызвать конструктор базового класса с помощью инициализатора:

class Circle : Shape

{

public Circle(double radius)

: base(radius, 0)

{

}

}

В этом примере класс Circle передает значения радиуса и высоты конструктору, предоставленному классом Shape, для которого класс Circle является производным. Полный текст кода с использованием классов Shape и Circle см. в данном разделе в примере 3.

Example 1

The following example demonstrates a class with two class constructors, one without arguments and one with two arguments.

class CoOrds

{

public int x, y;

// Default constructor:

public CoOrds()

{

x = 0;

y = 0;

}

// A constructor with two arguments:

public CoOrds(int x, int y)

{

this.x = x;

this.y = y;

}

// Override the ToString method:

public override string ToString()

{

return (System.String.Format("({0},{1})", x, y));

}

}

class MainClass

{

static void Main()

{

CoOrds p1 = new CoOrds();

CoOrds p2 = new CoOrds(5, 3);

// Display the results using the overriden ToString method:

System.Console.WriteLine("CoOrds #1 at {0}", p1);

System.Console.WriteLine("CoOrds #2 at {0}", p2);

}

}

Output

CoOrds #1 at (0,0)

CoOrds #2 at (5,3)