* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Создание компонента DoughnutMachine
8 февраля 2009
Сейчас вы создадите компонент, представляющий аппарат для производ- ства пончиков. Этот класс создает экземпляры класса Doughnut и управ- ляет ими, а также открывает доступ к набору объектов, представляющих разные виды пончиков. У него также будут события, уведомляющие ком- понент-контейнер о том, что пончик готов.
^ Создание компонента DoughnutMachine 1. В меню Project выберите команду Add Component — откроется окно Add New Item. Назовите новый компонент DoughnutMachine.vh или DoughnutMachiiie.cs в соответствии с используемым языком программирования и щелкните ОК — ком- понент будет открыт в окне дизайнера. 2. На панели Toolbox перейдите на вкладку Windows Forms и дважды щелкните компонент Timer — этот компонент Timer появится в окне дизайнера. 3. В окне Solution Explorer щелкните правой кнопкой объект DoughnutMachine и выберите View Code. 4. Добавьте к компоненту DoughnutMachine перечисление, представляющее различ- ные сорта пончиков. Оно выглядит примерно так: Visual Basic .NET Public Enum DoughnutType Glazed Sugar Chocolate ChocolateCake Custard Grape Lemon PlainCake SugarCake End Enum Visual C# public enum DoughnutType i Glazed, Sugar. Chocolate, ChocolateCake. Custard, Grape, Lemon, PlainCake, SugarCake 5. Добавьте к созданному классу свойство, представляющее сорт пончика, кото- рый он «печет» в данный момент. Для этого объявите в нем закрытую перемен- ную для хранения значения этого свойства. Новое свойство класса будет возвра- щать значение перечислимого типа DoughnutType. Вот код этого свойства: Visual Basic .NET Private mFlavor As DoughnutType Public Property Flavor{) As DoughnutType Get Return mFlavor End Get Set {ByVal Value As DoughnutType) mFlavor - Value End Set End Property Visual C# arivate DoughnutType mFlavor; public DoughnutType Flavor get return mFlavor; set 6. Объявите внутри класса Doughnut Machine класс Doughnut, который будет пред- ставлять пончик. У него должны быть свойства flavor (сорт пончика), price (его цена), а также свойство, доступное только для чтения, — для хранения времени изготовления пончика. Поскольку единственное место, где разрешается >стано- вить свойство, доступное только для чтения, — это конструктор, необходимо написать для класса Doughnut конструктор, записывающий в это свойство теку- щее время на момент создания экземпляра пончика. Код класса может бить та- ким: Visual Basic .NET Public Class Doughnut Это переменные для хранения значений свойств. Private mFlavor As DoughnutType Цена по умолчанию, Private mPrice As Single - .50 Private Readonly mTirneOfCreation As Date Это свойства класса, Public Property FlavorO As DoughnutType Get Returr rnFlavor End Get Set(ByVal Value As DoughnutType) mFlavor - Value End Set End Property Public Property PriceO As Single Get Return mPrice End Get Sei(ByVal Value As Single) •TiPrice = Value End Set End Property Public Readonly Property TimeOfCreation() As Date Get Return mTirneOfCreation End Get End Property Это конструктор, з котором устанавливается значение ' свойства mTirneOfCreation. Public Sub New(ByVal Flavor As DoughnutType) Date.Now - это свойство класса Date, возвращающее текущее время. mTirneOfCreation = Date. Now mFlavor = Flavor End Sub End Class Visual C# public class Doughnut { // Это переменные для хранения значений свойств. private DoughnutType rnFlavor; // Цена по умолчанию. private float mPrice - .50F; private readonly System. DateTime mTimeOfCreation; // Это свойства класса, public DoughnutType Flavor { get { return mFlavor; > set { mFlavor == value; } } public float Price { get { return Price; } set { mPrice - value; } } public System. DateTime TimeOfCreation { get ! return mTimeOf Creation; // Это конструктор, а котором устанавливается значение public Doughnut (DoughnutType Flavor) { // System. DateTime. Now - это свойство класса System. DateTime, // возвращающее текущее время inTimeOfCreation = System. DateTime. Now; riFlavor = Flavor; 7. Объявите в классе DoughnutMackine закрытый набор и свойство по умолчанию (в Visual Basic .NET, в Visual C# его нужно заменить индексатором), открываю- щее доступ к элементам набора. Созданный набор хранит экземпляры класса Doughnut, созданные объектом Doughnut Machine, Вот код этого свойства: Visual Basic .NET Private rnDoughnuts As New System. Collections. ArrayList() Public Default Property Doughnuts(Index As Integer) As Doughnut Get Return CType(mDoughnuts(Index), Doughnut) End Get Set (Value As Doughnut) TiDoughnuts(Index) = Value End Set End Property Visual C# orivate System. Collections. ArrayList rnDoughnuts = new System. Col lections. Ar ray List(): oublic Doughnut this[int Index] { get : return ( Doughnut )fflDoughnuts[ Index]; } set i mDoughnuts[Index] = value; 8. Добавьте к классу открытое (public) событие. Оно сгенерируется к моменту го- товности очередного пончика (то есть когда будет создан представляющий его объект). В Visual C# следует также объявить открытый делегат, Visual Basic .NET Public Event DoughnutComplete() Visual Ctt public delegate void DoughnutCompleteOelegateO; public event DoughnutCompleteDelegate DoughnutComplete; 9. При помощи раскрывающегося списка в окне редактора кода (Visual Basic NET) или кнопки Events в окне дизайнера (Visual C#) добавьте обработчик события TimerLTick (см. код ниже), который создает новые объекты Doughnut, добавляет их к набору mDoughnuts и генерирует событие DoughnutComplete. Visual Basic .NET Private Sub Tiiner1_Tick(ByVal sender As Object, ByVal e As System, EventArgs) Handles Ti.mer1.Tick Din aDoughnut As New Doughnut(Me. Flavor) rnDoughnuts. Add(aDoughnut) RaiseEvent DoughnutCompleteO End Sub Visual C# orivate void timer1_Tick(object sender, System. EventArgs e) 10. Создайте два свойства, доступных только для записи: Enabled и Interval с типами Boolean и Integer соответственно — они потребуются для установки внутренних свойств таймера. Вот код этих свойств: Visual Basic .NET Public WriteQnly Property EnabledC) As Boolean Set(ByVal Value As Boolean) Timer! . Enabled = Value End Set End Property Public WriteQnly Property Intervalf) As Integer Set(ByVal Value As Integer) Timed .Interval - Value End Set End Property Visual C# timerl.Enabled - value; } } pjblic int Interval set tirrier!. Interval = value; : ! 11. Добавьте к классу DoughnutMachine метод, настраивающий виртуальный аппа- рат, чтобы тот «пек» нужный сорт пончиков через заданные интервалы, и вклю- чающий этот аппарат. Этот метод должен принимать в качестве параметра объект, представляющий сорт пончика (DoughnutType). Вот этот метод: Visual Basic .NET Public Sub MakeDoughnuts(ByVal dFlavor As DoughnutType) Flavor = dFlavor Select Case dFlavor Case DoughnutType.Chocolate Interval = 15000 Case DoughnutType.ChocolateCake Interval - 12000 Case DoughnutType.Custard Interval = 10000 Case DoughnutType.Glazed Interval = 10000 Case DoughnutType.Grape Interval = 10000 Case DoughnutType.Lemon Interval = 10000 Case DoughnutType.PlainCake Interval = 5000 Case DoughnutType.Sugar Interval = 8000 Case DoughnutType.SugarCake Interval = 6000 End Select Enabled - True End Sub Visual C# public void MakeDoughnuts(DoughnutType dFlavor) { Flavor = dFlavor; switch(dFlavor) { case DoughnutType.Chocolate: Interval = 15000; break; case DoughnutType.ChocolateCake: Interval = 12000; break; case DoughnutType.Custard: Interval = 10000; break; case DoughnutType.Glazed: Interval = 10000; break; case DoughnutType.Grape: Interval = 10000; break; case DoughnutType.Lemon: Interval = 5000; break; case DoughnutType.PlainCake: Interval = 5000; break; case DoughnutType.Sugar: Interval = 8000; break; case DoughnutType.SugarCake: Interval = 6000; break; } Enabled = true; }