Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Private static readonly byte minPasswordLength;

Читайте также:
  1. A. Recruitment and military training of Peruvians by private security companies to provide security services in Afghanistan and Iraq
  2. A. Situation of private military and security companies in Fiji and recruitment of individuals by private companies for work abroad
  3. B. Activities, operations, functioning and oversight of private security companies in Peru
  4. B. Effects of the activities of Fijians working for private military and security companies on the enjoyment of human rights
  5. C. Involvement in social conflicts of private security companies providing protection services to transnational mining or natural resource extraction companies
  6. Classification of Law. Civil and Criminal Law. Public and Private Law.
  7. Private
  8. Private
  9. Private

}

Константыне величины (const) являются неявно статическими. Величина является постоянной по определению, поэтому нет необходимости хранить ее копии для каждого экземпляра класса. На них всегда можно ссылаться через имя класса:

int x = Authenticator.MaxLength;

Синтаксически не корректно объявлять величины const статическими (static)! Ключевое слово readonly допускает, что поле будет константным, но для определения его начального значения необходимо выполнить некоторые вычисления. Присвоить значение полю readonly можно только внутри конструктора(!). Поле readonly может быть полем экземпляра, а не статическим полем и иметь различные значения для каждого экземпляра класса. Это означает, что для того, чтобы поле было статическим его необходимо явно объявить таким. Если не инициализировать поле readonly в конструкторе, то оно будет иметь значению по умолчанию для данного типа или то значение, которое было присвоено ему при объявлении.

Вызов конструктора из других конструкторов

Public class Authenticator

{

// сначала вызыв. другой конструктор

public Authenticator(): this("none")

{

// что то делаем

}

Public Authenticator(string initialPassword)

{

password = initialPassword;

}

Private string password;

}

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

Ключевые слова base и this являются единственными допустимыми ключевыми словами, которые можно указывать в строке вызова другого конструктора. Все остальное сгенерирует ошибку компиляции. Замечу также, что может быть указан только один конструктор.

Конструкторы производных классов

public GenericCustomer(string initName)

{

name = initName;

}

public class PayAsYouGoCustomer: GenericCustomer

{

// конструктор без параметров в базовом классе

// отсутствует поэтому необходимо вызивать собственный

public PayAsYouGoCustomer(string initName): base(initName)

{

//..

}

...

Nevermore60Customer Alex = new Nevermore60Customer("Alex");

 

Теперь конструктор будет создаваться только в том случае, если в конструктор будет передаваться строка, содержащая имя пользователя.

 

  1. Деструкторы. Назначение, определение, вызов.

В языке С# имеется возможность определить метод, который будет вызываться непосредственно перед окончательным уничтожением объекта системой "сборки мусора". Такой метод называется деструктором и может использоваться в ряде особых случаев, чтобы гарантировать четкое окончание срока действия объекта. Например, деструктор может быть использован для гарантированного освобождения системного ресурса, задействованного освобождаемым объектом. Ниже приведена общая форма деструктора:

 

~имя_класса () {

// код деструктора

}

Finalize() наиболее близко соответствует концепции традиционного деструктора. Если объявить в классе метод Finalize() он будет автоматически вызываться при уничтожении экземпляра класса. Finalize() является детерминированным, т.е. нет способа выяснить, когда будет вызван сборщик мусора и соответственно Finalize(). Следовательно, в метод Finalize() нельзя помещать код, который должен выполняться в какое-то определенное время. Запустить сборщик мусора можно с помощью метода System.GC.Collect(). Не рекомендуется реализовывать метод Finalize() если только класс действительно не нуждается в нем. Это наносит сильный удар по производительности при сборке мусора.

Практически во всех случаях освобождение ресурсов средой исполнения.NET является наилучшим решением. В основном Finalize() надо использовать тогда, когда объект работает с ресурсами, которыми.NET не управляет, - например, файлы и соединения с базами данных. Реализация:

~MyClass ()

{

//..

}

Деструкторы Dispose() и Close()

Они работают таким образом, что при желании вы можете определить один из них для класса, понимая при этом, что клиентский код обязан явно вызывать этот метод для освобождения ресурсов. Ресурсы освобождаются сразу после того, как отпадает надобность в них. Недостаток: вы полагаетесь на то, что клиентский код будет вести себя корректно и вызовет этот метод (однако это может и не произойти).

Типичное решение – использование Dispose() и Close() совместно с Finalize():

public class myClass: MasterClass

{




Дата добавления: 2015-02-16; просмотров: 73 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав