Twit | Дата: Воскресенье, 17.03.2013, 12:43 | Сообщение # 1 |
 Приятно Царь
| Классы в 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 работает с этой переменной и с некоторыми другими по надобности. В этом примере мы определили конструктор с двумя параметрами, т.е. конструктор, устанавливающий значения двух перменных-членов, а остальные инициализируются при установке значения свойства. Такой прием носит название отложенной инициализации и имеет немалое значение в оптимизации.
Кризис.Разные мнения.Идеи.
Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
|
|
| |