Залепа №3. Майкрософт - антиглобалист!
C# - мега-объектно-ориентированный язык. Настолько ориентированный, что создатели решили насовсем отказаться от глобальных объектов, хотя в классическом ООП на этот счет нет таких строгих правил.
Смысл этого отказа остается непонятным - без глобальных объектов просто невозможно написать ни одной программы, в крайнем случае хотя бы один объект но все же будет глобальным. Например объект, представляющий само приложение :)
Но давайте лучше рассмотрим КАК это выглядит на практике.
Думаю, никто не будет спорить, что в любой программе есть функции, не привязанные к какому-то определенному объекту, т.е. по-сути глобальные (например та же Main()). Так же есть и объекты, не являющиеся членами других объектов, т.е. тоже глобальные. В C# глобальных объектов быть не может, поэтому вышеописанные пасажиры насильно всунуты в классы-обертки, а свою истинную глобальность выдают только наличием волшебного слова "Static".
Но объясните мне, дураку, в чем такое мега-отличие между обычной глобальной переменной от той же переменной с атрибутом static и засунутой в псевдо-класс, который представляет собой просто бесполезную оболочку?
Скажете - это для разделения, чтоб не возникало конфликтов имен? Но чем гениев из мелкософта не удовлетворили обычные (и именно для этого и созданные!) пространства имен? Ну разве это:
namespace MyVariables
{
int a, b, c;
void ThisIsMyFunc(string par) {...};
}хуже чем это:
namespace MyNamespace
{
public class МойНафигЗдесьНеНужныйКласс
{
public static int a,b,c;
public static void ThisIsMyFunc(string par) {...};
}
}Меня пол-часа бил истерический хохот, когда я впервые увидел вот эту супер-ООП-конструкцию:
static class Program
{
static void Main(){...}
}Может в мелкософте ЭТО считают вершиной своих достижений, мне же кажется, что ЭТО - просто чушь.