У меня есть общедоступное статическое свойство «inDevMode» в главном окне моего проекта WPF, я устанавливаю это свойство на основе команды line при запуске приложения.C#, что вызывает это странное поведение при доступе к свойству Static в главном окне WPF из App.xaml.cs
MainWindow mainWindow = new MainWindow();
if (startInDevMode)
{
MainWindow.inDevMode = true;
}
mainWindow.Show();
«MainWindow» внутри фигурных скобок не выделяется серым цветом (который остальные две ссылки типа являются) и при компиляции я получаю сообщение:
'Window' does not contain a definition for 'inDevMode' and no extension method 'inDevMode' accepting a first argument of type 'Window' could be found (are you missing a using directive or an assembly reference?)
Если я изменить то, что находится в пределах Ортезы на ссылки экземпляра (как показано ниже), который я знаю, это неправильно, когда доступ к статическому свойству:
MainWindow mainWindow = new MainWindow();
if (startInDevMode)
{
mainWindow.inDevMode = true;
}
mainWindow.Show();
Я получаю эту ошибку:
Member 'MainWindow.inDevMode' cannot be accessed with an instance reference; qualify it with a type name instead
Но если я сменил идентификатор экземпляра «mainWindow» на «MainWindow», как показано ниже, я не получу ошибок?
MainWindow MainWindow = new MainWindow();
if (startInDevMode)
{
MainWindow.inDevMode = true;
}
MainWindow.Show();
и ссылочный тип внутри фигурных скобок («MainWindow») теперь серый
Но почему бы переименовать экземпляр «MainWindow» разрешить конфликт имен? – stuicidle
Потому что тогда имя «MainWindow» внезапно ссылается на локальную переменную, которая находится в области действия, а не на свойство, а затем разрешение имени преуспевает. Дополнительную информацию о том, как работает неквалифицированное разрешение имен на C#, см. В следующей ссылке: https://msdn.microsoft.com/en-us/library/aa711882(v=vs.71).aspx. – mm8