почему статические методы не будут выбрасывать NullReferenceException? - PullRequest
2 голосов
/ 06 октября 2010

Почему статические методы не будут генерировать исключение NullReferenceException?или будет выбрасывать исключение NullReferenceException?Если это не приведет к ошибке, кто-нибудь может объяснить, почему на соответствующем примере.

Ответы [ 3 ]

8 голосов
/ 06 октября 2010

Статические методы не относятся к экземпляру типа, поэтому нет ссылки на потенциально нулевое значение.

Конечно, если тело статического метода делает что-то, что обычно вызывает исключение, оно будет распространяться как обычно:

class Test
{
    static void Main()
    {
        GoBang();
    }

    static void GoBang()
    {
        string s = null;
        int y = s.Length; // Bang! NullReferenceException
    }
}
1 голос
/ 06 октября 2010

Статический метод вызывается с классом, который никогда не равен null. Методы экземпляра вызываются с экземпляром, который может быть null, так как программист не сделал new для него.

0 голосов
/ 06 октября 2010

CLR считает любой тип нестабильным, если он генерирует необработанное исключение (любого типа) в конструкторе типов. Попытка доступа к любому члену нестабильного типа вызовет исключение TypeInitializationException.

Итак, исключение NullReferenceException будет выброшено, но оно будет преобразовано в исключение TypeInitializationException во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...