Это будет быстрый вопрос. Я не совсем понимаю, почему это происходит, так что я покажу вам, что меня беспокоит с помощью простых примеров ..Объявление и инициализация переменных структуры
Первый пример:
private static Point pt;
public static void Main(string[] args)
{
pt.Display();
}
public struct Point
{
public int X;
public int Y;
public void Display()
{
Console.WriteLine("X = {0}, Y = {1}", X, Y);
}
}
Второй пример:
public static void Main(string[] args)
{
Point pt;
pt.Display();
}
public struct Point
{
public int X;
public int Y;
public void Display()
{
Console.WriteLine("X = {0}, Y = {1}", X, Y);
}
}
Возможно, мне что-то не хватает, но первый пример компилируется правильно, и я получаю вывод на консоли, а во втором примере он даже не компилируется, потому что:
Локальная переменная 'pt' не может быть инициализирована перед доступом.
Ну, это также не инициализировано в первом случае, но это делает работу, в чем смысл?
P.S. Каламбур не предназначен.
О, статическое ключевое слово указывает компилятору на инициализацию переменных по умолчанию? – msmolcic
@ Смола не имеет ничего общего со статикой. это верно для всех полей класса. если у вас есть поле ссылочного типа и не инициализируйте его, вы не получите неинициализированную ошибку, но вы получите исключение NullReferenceException во время выполнения, если попытаетесь получить доступ к его членам, поскольку значение null является значением по умолчанию для ссылочных типов. –
Итак, если я понял, что новый класс, который содержит метод Main, был создан автоматически при запуске моей программы? Так же, как я написал MyClass class = new MyClass(); и он автоматически инициализировал мою структуру Point и ее переменные значениями по умолчанию, но во втором примере это не так, потому что Point не является частным членом моего класса запуска, а локальной переменной внутри моего основного метода? – msmolcic