диаграмме. Диаграмма показывает ситуацию, когда выбрано создание проекта стандартного EXE, отличающегося от других типов проектов (например, ActiveX DLL вообще не имеет цикла сообщений, но вместо этого зависит от клиентов в отношении вызова методов), и при этом дается примерное представление о том, что происходит.
Ранее было сказано, что в C# программист получает доступ ко всему коду, теперь необходимо это уточнить: все мельчайшие подробности относительно того, что происходит в цикле сообщений, надежно скрыты внутри различных DLL, которые написала компания Microsoft, но можно видеть методы верхнего уровня, вызывающие различные элементы обработки. Допустим, имеются доступы к коду, который начинает выполнение всей программы, к вызову библиотечного метода, который заставляет программу войти в цикл сообщений и переводит ее в спящее состояние и т.д. Имеется также доступ к исходному коду, создающему экземпляры всех различных элементов управления, которые помещаются на форме, делая эти экземпляры видимыми и определяя их начальные положения, размеры и все остальное. Необходимо отметить еще и тот момент, что не требуется писать никакой подобный код самостоятельно. При использовании Visual Studio.NET для создания проекта C# по-прежнему появляется диалоговое окно, спрашивающее, какой тип проекта необходимо создать, и Visual Studio.NET будет по-прежнему готовить весь базовый код. Различие состоит в том, что Visual Studio.NET записывает этот базовый код, как исходный на C#, который затем можно непосредственно редактировать.
Все это приводит к тому, что исходный код получается более длинным и более сложным. Однако огромное его преимущество заключается в том, что он обеспечивает значительно большую гибкость в том, что делает программа и как она себя ведет. А значит, можно написать намного больше типов проектов в C#. В то время как в Visual Basic возможно написание только различных видов форм и компонентов COM, в C# вы в праве написать любую из различных типов программ, которые выполняются под Windows. Это включает, например, консольные приложения (командной строки) и страницы ASP.NET (наследник ASP), что нельзя написать в VB6 (можно использовать VBScript для страниц ASP). В этом приложении, однако, мы сосредоточимся на классических приложениях GUI для Windows.
Код C# для оставшейся части программы
В этом разделе будет рассмотрена оставшаяся часть кода для примера SquareSample
, в результате чего мы узнаем немного больше о классах в C#.
Пример SquareRoot
на C# был создан в Visual Studio.NET, а пример на VB — в IDE VB6. Однако представленный здесь код является не совсем тем, который сгенерировала Visual Studio.NET. Помимо добавления обработчика событий, сделаны и другие изменения в коде, чтобы лучше проиллюстрировать принципы программирования в C#. Но несмотря ни на что, он все-таки даст хорошее представление о той работе, которую делает Visual Studio.NET, когда создает проект.
Весь текст исходного кода достаточно длинный. Он представлен здесь для полноты, но лучше сразу перейти к последующим объяснениям и обращаться к исходному коду по мере необходимости.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Wrox.ProfessionalCSharp.AppendixC.SquareRootSample {
/// <summary>
/// Form, которая формирует основное окно приложения:
/// </summary>
public class SquareRootForm : System.Windows.Forms.Form {
private System.Windows.Forms.TextBox txtNumber;
private System.Windows.Forms.TextBox txtSign;
private System.Windows.Forms.TextBox txtResult;
private System.Windows.Forms.Button cmdShowResults;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows Forms.Label label3;
private System.Windows.Forms.Label label4;
/// <summary>
/// Необходимые для designer переменные.
/// </summary>
private System.ComponentModel.Container components;
public SquareRootForm() {
InitializeComponent();
}
public override void Dispose() {
base.Dispose();
if(components != null) components.Dispose();
}
#region Windows Form Designer generated code
/// <summary>
/// Требуемый для поддержки Designer метод - не изменять
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent() {
this.txtNumber = new System.Windows.Forms.TextBox();
this.txtSign = new System.Windows.Forms.TextBox();
this.cmdShowResults = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.txtResult = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// txtNumber
//
this.txtNumber.Location = new System.Drawing.Point(160, 24);
this.txtNumber.Name = 'txtNumber';
this.txtNumber.TabIndex = 0;
this.txtNumber.Text = '';
//
// txtSign
//
this.txtSign.Enabled = false;