netlib.narod.ru | < Назад | Оглавление | Далее > |
При рассмотрении программ вроде HelloWorld может вызвать удивление метод Main. Main — метод класса HelloWorld, в то же время Main создает экземпляр класса HelloWorld. Это может показаться странным: программа уподобляется Мюнхгаузену, который вытянул себя из болота за волосы. Как метод Main вообще может выполняться, если еще не создан экземпляр класса HelloWorld?
Отвечаю: метод Main определен как static. Существование статических методов не зависит от того, созданы ли экземпляры каких-либо объектов класса. По идее ОС загружает программу в память и начинает выполнение программы с вызова:
HelloWorld.Main();
Если Main не определен как static, ОС не сможет его вызвать. Если вы удалите слово static из определения Main, компилятор сообщит об отсутствии у программы точки входа.
Может, вам покажется удобнее поместить Main в свой класс, как в программах на С# главы 1. В этом нет ничего неправильного, и кое-кто предпочитает этот подход. Его демонстрирует программа SeparateMain.cs, по функциональности не отличающаяся от HelloWorld.
SeparateMain.cs
//----------------------------------------------- // SeparateMain.cs (C) 2001 by Charles Petzold //----------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld: Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, Windows Forms!", Font, Brushes.Black, 0, 0); } }
Согласен: она выглядит чище с точки зрения архитектуры, и я немного поэкспериментировал, структурируя примеры программ моей книги таким образом. Но у меня нет желания добавлять в каждую программу три строки кода, и я не вижу смысла заводить два класса там, где можно обойтись одним. Кроме того, я отказался от такого подхода, когда начал замечать, что статические методы и свойства классов .NET возвращают экземпляры классов, к которым они относятся. Например, Chocolate — статическое свойство класса Color, тем не менее, оно возвращает экземпляр Color.
netlib.narod.ru | < Назад | Оглавление | Далее > |