Правила размещения кода для формы

Перемещая некоторый код в целях исследования, я натолкнулся на небольшую особенность.NET, о которой я не знал, а именно, что класс формы должен быть первым классом в модуле формы для работы дизайнера форм. Следующее мешает дизайнеру работать:

public class myClass
{
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

...
}

Он все еще компилируется (с предупреждением) и запускается, но не будет проектироваться. Если я переместить myClass в конец файла, то он работает нормально. Кто-нибудь знает, почему это так?

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

2 ответа

Решение

Я думаю, что это артефакт дизайнера.NET 1.1. Тогда еще не было частичного ключевого слова, у дизайнера была незавидная задача найти метод InitializeComponent(), даже в коде, который находился в процессе редактирования. Никакой помощи от компилятора.

Чтобы избежать риска неправильной интерпретации кода, в нем были некоторые основные правила о том, как должен выглядеть этот код. И требование, чтобы класс формы был первым классом в файле, имеет большой смысл. Если бы этого правила не было, оно должно было бы иметь возможность проанализировать класс, который может иметь очень простые синтаксические ошибки, такие как несбалансированные скобки. Простое объявление "не могу загрузить форму" в этом случае никого не порадует.

Это требование не может быть отменено после того, как станет доступным частичное ключевое слово, оно все еще должно поддерживать формы, которые были разработаны в более ранних версиях.

Это единственное правило верстки кода, которое я знаю. Существует множество других возможных неудач, но ручное использование InitializeComponent() всегда является хорошим способом получить WSOD.

Видимо, это просто дизайнер. Это не о чем беспокоиться.

Это не имеет ничего общего с самим C#, но больше касается дизайнера Visual Studio, который находит и рисует форму на экране.

Другие вопросы по тегам