Студопедия — Volatile 11 страница
Студопедия Главная Случайная страница Обратная связь

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

Volatile 11 страница






using System.IO;

public class Console
{
private static TextReader reader;
private static TextWriter writer;
private static TextWriter error;

public static TextReader In {
get {
if (reader == null) {
reader = new StreamReader(Console.OpenStandardInput());
}
return reader;
}
}

public static TextWriter Out {
get {
if (writer == null) {
writer = new StreamWriter(Console.OpenStandardOutput());
}
return writer;
}
}

public static TextWriter Error {
get {
if (error == null) {
error = new StreamWriter(Console.OpenStandardError());
}
return error;
}
}
}

Класс Console содержит три свойства (In, Out и Error), которые представляют стандартные устройства ввода, вывода и вывода ошибок соответственно. Благодаря предоставлению этих членов в виде свойств класса Console обеспечивается задержка их инициализации до момента фактического использования Например, при первой ссылке на свойство Out, как показано в примере

Console.Out.WriteLine("hello, world");

создается базовый объект TextWriter для устройства вывода. Однако если приложение не ссылается на свойства In и Error, объекты для этих устройств не создаются.

10.7.3 Автоматически реализуемые свойства

Для свойства, определенного как автоматически реализуемое свойство, автоматически создается скрытое резервное поле, для которого реализуются методы доступа для чтения и записи.

Следующий пример:

public class Point {
public int X { get; set; } // automatically implemented
public int Y { get; set; } // automatically implemented
}

равнозначен следующему объявлению:

public class Point {
private int x;
private int y;
public int X { get { return x; } set { x = value; } }
public int Y { get { return y; } set { y = value; } }
}

Поскольку резервное поле недоступно, чтение и запись его значений осуществляются только с помощью методов доступа свойства, даже внутри типа контейнера. Это означает, что автоматически реализуемые свойства только для чтения или только для записи не имеют смысла и не разрешены. Однако возможно задать различные уровни доступа для каждого из методов доступа. Таким образом, можно имитировать свойство только для чтения с закрытым резервным полем следующим образом:

public class ReadOnlyPoint {
public int X { get; private set; }
public int Y { get; private set; }
public ReadOnlyPoint(int x, int y) { X = x; Y = y; }
}

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

10.7.4 Доступность;

Если метод доступа содержит модификатор_метода_доступа;, область доступности (§3.5.2) метода определяется на основании объявленной доступности модификатора_метода_доступа;. Если метод доступа не содержит модификатор_метода_доступа;, область доступности метода определяется на основании объявленной доступности свойства или индексатора.

Наличие модификатора_метода_доступа; никогда не влияет на поиск членов (§7.3) или разрешение перегрузки (§7.5.3). Модификаторы свойства или индексатора всегда определяют связанные свойство или индексатор независимо от контекста доступа.

После выбора конкретного свойства или индексатора допустимость их использования определяется на основании областей доступности задействованных методов доступа.

· Для использования в качестве значения (§7.1.1) должен существовать и быть доступным метод доступа get.

· Для использования в качестве конечного объекта операции простого присваивания (§7.17.1) должен существовать и быть доступным метод доступа set.

· Для использования в качестве конечного объекта операции составного присваивания (§7.17.2) или в качестве конечного объекта операторов «++» или «--» (§7.5.9, §7.6.5) должны существовать и быть доступны оба метода доступа (get и set).

В следующем примере свойство A.Text скрывается свойством B.Text даже в тех контекстах, в которых вызывается только метод доступа set. Противоположно этому, свойство B.Count недоступно для класса M, в связи с чем вместо него используется доступное свойство A.Count.

class A
{
public string Text {
get { return "hello"; }
set { }
}

public int Count {
get { return 5; }
set { }
}
}

class B: A
{
private string text = "goodbye";
private int count = 0;

new public string Text {
get { return text; }
protected set { text = value; }
}

new protected int Count {
get { return count; }
set { count = value; }
}
}

class M
{
static void Main() {
B b = new B();
b.Count = 12; // Calls A.Count set accessor
int i = b.Count; // Calls A.Count get accessor
b.Text = "howdy"; // Error, B.Text set accessor not accessible
string s = b.Text; // Calls B.Text get accessor
}
}

Метод доступа, используемый для реализации интерфейса, может не содержать модификатор_метод_доступа. Если для реализации интерфейса используется только один метод доступа, второй метод доступа может быть объявлен с помощью модификатора_метода_доступа;:

public interface I
{
string Prop { get; }
}

public class C: I
{
public Prop {
get { return "April"; } // Must not have a modifier here
internal set {...} // Ok, because I.Prop has no set accessor
}
}

10.7.5 Виртуальные, запечатанные, переопределяющие и абстрактные методы доступа

Объявление свойства virtual указывает, что методы доступа свойства являются виртуальными. Модификатор virtual применяется к обоим методам доступа свойства для чтения и записи. Объявление в качестве виртуального только одного метода доступа такого свойства не допускается.

Объявление свойства abstract указывает, что методы доступа свойства являются виртуальными, однако не предоставляет их фактической реализации. Вместо этого необходимо определить неабстрактные производные классы, предоставляющие собственные реализации методов доступа посредством переопределения свойства. Поскольку метод доступа для объявления абстрактного свойства не предоставляет фактической реализации, тело_метода_доступа; содержит только точку с запятой.

Объявление свойства, содержащее одновременно модификаторы abstract и override, указывает, что свойство является абстрактным и переопределяет базовое свойство. Методы доступа такого свойства также являются абстрактными.

Объявления абстрактных свойств допускаются только в абстрактных классах (§10.1.1.1). Методы доступа унаследованного виртуального свойства можно переопределить в производном классе, включив объявление свойства, задающее директиву override. Этот способ называется переопределяющим объявлением свойства. Переопределяющее объявление свойства не объявляет новое свойство. Вместо этого оно уточняет реализацию методов доступа существующего виртуального свойства.







Дата добавления: 2015-09-07; просмотров: 433. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

СИНТАКСИЧЕСКАЯ РАБОТА В СИСТЕМЕ РАЗВИТИЯ РЕЧИ УЧАЩИХСЯ В языке различаются уровни — уровень слова (лексический), уровень словосочетания и предложения (синтаксический) и уровень Словосочетание в этом смысле может рассматриваться как переходное звено от лексического уровня к синтаксическому...

Плейотропное действие генов. Примеры. Плейотропное действие генов - это зависимость нескольких признаков от одного гена, то есть множественное действие одного гена...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия