Добавить в цитаты Настройки чтения

Страница 257 из 371



Вот как выглядит автоматически добавленное в класс описание элементов управления:

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.Button button1;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.Label label2;

А вот фрагмент текста процедуры InitailizeComponent:

#region Windows Form Designer generated code

    /// <summary>

    /// Required method for Designer support — do not

    /// modify the contents of this method with the code

    /// editor.

    /// </summary>

    private void InitializeComponent()

    {

         this.label1 = new System.Windows.Forms.Label();

         this.textBox1 = new System.Windows.Forms.TextBox();

         this.button1 = new System.Windows.Forms.Button();

         this.textBox2 = new System.Windows.Forms.TextBox();

         this.label2 = new System.Windows.Forms.Label();

         this.SuspendLayout ();

         // label1

         this.label1.Location = new System.Drawing.Point(24, 40);

         this.label1.Name = "label1";

         this.label1.Size = new System.Drawing.Size (152, 32);

         this.label1.Tablndex = 0;

         this.label1.Text = "Ваше имя";

         this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

… аналогично задаются описания свойств всех элементов управления…

… далее задаются свойства самой формы…

             // Form1 //

             //

             this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);

             this.ClientSize = new System.Drawing.Size(528, 268);

             this.Controls.AddRange(new

                 System.Windows.Forms.Control[]

                 {

                      this.textBox2,

                      this.Iabel2,





                      this.button1,

                      this.textBox1,

                      this.label1

                  });

              this.Name = "Form1";

              this.Text = "Приветствие";

              this.Load += new System.EventHandler(this.Form1_Load);

              this.ResumeLayout(false);

        }

        #endregion

Заметьте, в теге <summary> нас предупреждают, что этот метод требуется специальному инструментарию

— Дизайнеру формы — и он не предназначен для редактирования пользователем; добавление и удаление кода этого метода производится автоматически. Обращаю внимание, что после заполнения свойств элементов управления заключительным шагом является их добавление в коллекцию Controls, хранящую все элементы управления. Здесь используется метод AddRange, позволяющий добавить в коллекцию одним махом целый массив элементов управления. Метод Add позволяет добавлять в коллекцию по одному элементу. Позже нам придется добавлять элементы управления в форму программно, динамически изменяя интерфейс формы. Для этого мы будем выполнять те же операции: объявить элемент управления, создать его, используя конструкцию new, задать нужные свойства и добавить В коллекцию Controls.

В заключение приведу текст обработчика событий командной кнопки. Как задается обработчик того или иного события для элементов управления? Это можно делать по-разному. Есть стандартный способ включения событий. Достаточно выделить нужный элемент в форме, в окне свойств нажать кнопку событий (со значком молнии) и из списка событий выбрать нужное событие и щелкнуть по нему. В данной ситуации все можно сделать проще — двойной щелчок по кнопке включает событие, и автоматически строится заготовка обработчика события с нужным именем и параметрами. Вот как она выглядит:

private void button1_Click(object sender,System.EventArgs e)

    {

    }

Нам остается добавить свой текст. Я добавил следующие строки:

string temp;

    temp = textBox1.Text;

if(temp == "")

    textBox2.Text = "Здравствуй, мир!";

else

textBox2.Text = "Здравствуй, " + temp +" !";

И вот как это работает.

Рис. 2.5. Форма "Приветствие" в процессе работы

На этом мы закончим первое знакомство с проектами на C# и в последующих лекциях приступим к систематическому изучению возможностей языка.

3. Система типов языка С#

Общий взгляд. Система типов. Типы-значения и ссылочные типы. Встроенные типы. Сравнение с типами C++. Типы или классы? И типы, и классы! Преобразования переменных в объекты и vice versa. Операции "упаковать" и "распаковать". Преобразования типов. Преобразования внутри арифметического типа. Преобразования строкового типа. Класс Convert и его методы. Проверяемые преобразования. Управление проверкой арифметических преобразований.

Общий взгляд

Знакомство с новым языком программирования разумно начинать с изучения системы типов этого языка. Как в нем устроена система типов данных? Какие есть простые типы, как создаются сложные, структурные типы, как определяются собственные типы, динамические типы, как определяются классы?

В первых языках программирования понятие класса отсутствовало — рассматривались только типы данных. При определении типа явно задавалось только множество возможных значений, которые могут принимать переменные этого типа. Например, тип integer задает целые числа в некотором диапазоне. Неявно с типом всегда связывался и набор разрешенных операций. В типизированных языках, к которым относится большинство языков программирования, понятие переменной естественным образом связывалось с типом. Если есть тип T и переменная х типа T, то это означало, что переменная может принимать значения из множества, заданного типом, и к ней применимы операции, разрешенные типом.

Классы и объекты впервые появились в программировании в языке Симула 67. Произошло это спустя 10 лет после появления первого алгоритмического языка Фортран. Определение класса наряду с описанием данных содержало четкое определение операций или методов, применимых к данным. Объекты — экземпляры класса являются обобщением понятия переменной. Сегодня определение класса в C# и других объектных языках, аналогично определению типа в CTS, содержит:

• данные, задающие свойства объектов класса;

• методы, определяющие поведение объектов класса;

• события, которые могут происходить с объектами класса.

Так есть ли различие между этими двумя основополагающими понятиями — типом и классом? На первых порах можно считать, что класс — это хорошо определенный тип данных, объект — хорошо определенная переменная. Понятия фактически являются синонимами, какое из них употреблять лишь дело вкуса. Встроенные типы, такие как integer или string, предпочитают называть по-прежнему типами, а их экземпляры — переменными. Что же касается абстракции данных, описывающей служащих и названной, например, Employee, то естественнее называть ее классом, а ее экземпляры — объектами. Такой взгляд на типы и классы довольно полезен, но он не является полным. Позже при обсуждении классов и наследования постараемся более четко определить принципиальные различия в этих понятиях.

Объектно-ориентированное программирование, доминирующее сегодня, построено на классах и объектах. Тем не менее, понятия типа и переменной все еще остаются центральными при описании языков программирования, что характерно и для языка С#. Заметьте, что и в Framework.Net предпочитают говорить о системе типов, хотя все типы библиотеки FCL являются классами.