[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Учим C#: №8
TwitДата: Воскресенье, 17.03.2013, 12:43 | Сообщение # 1
Нет аватара
Приятно Царь

Сообщений: 42
Награды: 7


« -5 »

Оффлайн
Классы в C# могут содержать и такие элементы, как свойства. Эти члены являются очень важными и довольно часто используются. По сути, свойства - это данные, отображающие какие-либо особенности, опции, а лучше их смысл понимать дословно. Если вы хотите стать программистом .Net, вы обязаны знать этот механизм и владеть им в совершенстве. Но и тут не надо иметь семи пядей во лбу, как всегда, все очень просто. Свойство - это динамическое поле, для которого определены методы доступа, обычно они объявляются с модификатором доступа public, т.е. открытыми, т.к. обычно свойства изменяются вне объекта. Свойства целесообразно использовать вместо обычных переменных там, где, в соответствии со значением переменной, должны изменять свое значение и другие члены класса. Т.е., благодаря свойствам, нам не придется переписывать код изменения заново, или, что еще хуже, повторно вызывать конструкторы. Внешне синтаксис свойств похож на синтаксис индексаторов. Используются методы доступа с такими же именами, точно так же без аргументов. Общий вид:

public тип имя
{
get
{возврат_значения;}
set
{проверка;
установка_значения;
обновление_других_членов;
}
}


И, наконец, маленький примерчик рационального использования свойств. Определим свойство IsBoxed логического типа для класса, описывающего проц.

using Sc=System.Console;

class CPU
{
private string name;
private int freq;
private bool isboxed;
private bool needcooler;

public CPU(string n,int f)
{
name=n;
freq=f;


public bool IsBoxed
{
get{return isboxed;}
set
{
isboxed=value;
if(value==true) needcooler=false;
else needcooler=true;
}


public void Print() 

Sc.WriteLine("This is "+name); 
Sc.WriteLine("Frequency is "+freq); 
if(needcooler==true) 
Sc.WriteLine("It needs a cooler!"); 
else Sc.WriteLine("It is boxed."); 
}

}

class Application
{
public static void Main()
{
CPU Pentium=new CPU("Pentium",2000);
CPU Athlon=new CPU("Athlon",2000);
Pentium.IsBoxed=true;
Athlon.IsBoxed=false;
Sc.WriteLine("The first CPU:");
Pentium.Print();
Sc.WriteLine();
Sc.WriteLine("The second CPU:");
Athlon.Print();
Sc.ReadLine();
}
}


Я хочу остановиться на следующем моменте -> мы определили закрытый член-переменную isboxed и открытое свойство IsBoxed. Так вот, в isboxed хранится значение, определяющее тип упаковки проца, в то время, как свойство IsBoxed работает с этой переменной и с некоторыми другими по надобности. В этом примере мы определили конструктор с двумя параметрами, т.е. конструктор, устанавливающий значения двух перменных-членов, а остальные инициализируются при установке значения свойства. Такой прием носит название отложенной инициализации и имеет немалое значение в оптимизации.




Кризис.Разные мнения.Идеи.

Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
  • Страница 1 из 1
  • 1
Поиск: