В C# статический частный члены в Xamarin кросс-платформа XAML-кода форм приложение
После многих лет без кодирования я перезапускаю Программирование c# для своего собственного, начиная с кросс-платформенного приложения XAML.Forms. C# для меня новый язык, но с C и C++ у меня есть многолетний опыт работы.
Меня беспокоит не кодирование и тестирование моего кода, а необычное и неожиданное поведение моего окружения. После того, как у меня возникла та же проблема с моим более сложным кодом, я свел проблему к очень простым вещам вроде этого.
public class Tester { public static Tester _ttester = null; private static bool finit = false; public Tester() { if (!finit) // first time? { finit = true; // first round done _ttester = new Tester(); // initiate a special global object for general use } } }
С вызовом такого кода, как этот
static Tester tst = null; tst = new Tester()
в начале кода моего приложения.
Приложение зависает с конструктором in "Tester", который никогда не завершается.
Что я уже пробовал:
Если я использую отладчик, устанавливая точку останова в начале моего конструктора тестера, я замечаю, что не могу просмотреть локальный статический var "finit". "Выражение не может быть оценено". И внутри программы вроде бы то же самое. С "новым тестером" конструктор вызывается рекурсивно. Но член "finit" должен защищать второго тестера, вызывающего третьего. Но отладчик показывает, что это происходит не так. Конструктор "тестер" вызывается снова и снова, никогда не прерываясь. Может быть, очень умный оптимизатор убивает мое кодирование. Я не имею ни малейшего представления и нуждаюсь в некоторой помощи.
Делая то же самое в маленьком "consoleApp" все работает так, как ожидалось. Но в моей более сложной кросс-платформенной среде это не работает. Может быть, из-за того, что вы разделили приложение на две части. Общая часть приложения и специфический код платформы. В прежние времена я мог смотреть на машинный код и видеть, что сгенерировал компилятор. Я не нашел способа увидеть что - то подобное сегодня.
Заранее спасибо.