Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
string postalcode=Customer.Address.PostalCode;
//if customer or address is null , this will through exeption
здесь, если адрес имеет значение null, то вы получите NullReferenceException.
Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)
string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
Да, это должно быть Main
. Это статично, потому что в противном случае CLR нужно будет беспокоиться о создании экземпляра типа, что означает, что вы, вероятно, должны иметь конструктор без параметров, даже если вы не хотели экземпляр типа и т. д. Почему вы хотите заставить его быть методом экземпляра?
Да для приложения ac #, Main()
должна быть точкой входа.
Причина в том, что разработчики этого языка решили, что искать в качестве точки входа для вашей программы , Они могли бы использовать совершенно другой подход, чтобы найти точку входа, например. использование метаданных или создание экземпляра объекта для вас (для чего потребуется конструктор без параметров). Другая причина для его именования void main()
заключается в том, что он интуитивно понятен для пользователей, поступающих с других языков.
Static Void Main () - это необходимая точка входа для любого исполняемого файла (.EXE), который будет создан на C #. Библиотека (или .DLL) может иметь другие точки входа.
Метод является Static, потому что это необходимо для доступа к методу без экземпляра объекта для адресации. Чтобы вызвать метод (отправную точку) извне приложения, требуется статический метод.
Фактическая требуемая точка входа:
static void Main(string[] args); // note capitalization and arguments
Причина, по которой Main
должна быть статичной, заключается в том, что нестатические объекты должны быть сконструированы, прежде чем вы вызовете на них какие-либо методы. Поскольку Main
является точкой входа в программу, кто будет называть ее конструктором?
(Да, вы могли бы иметь CLR, чтобы класс с Main
содержал конструктор без параметров без параметров и CLR вызывает этот конструктор во время глобального запуска. Но это дополнительная работа, и на практике проще просто потребовать, чтобы Main
был статичным.)