Строго говоря, это зависит от того, где находится код.
Если код находится в обычной функции / методе, это повлияет только на стек.Это не повлияет на кучу, поскольку объекты MyClass еще не созданы.
Предполагая, что MyClass является классом (то есть ссылочным типом), каждое объявление будет резервировать достаточно места в стеке для хранения ссылки наобъект MyClass.
Два объявления немного различаются - первое не инициализировано, поэтому любая попытка доступа к oMyClass1 до того, как он будет установлен на что-либо, приведет к ошибке компилятора.Второй инициализируется, поэтому вы не получите ошибку компилятора [хотя вы получите ошибку времени выполнения, если вы получите доступ к методу или свойству oMyClass2 до того, как вы установите его для ссылки на фактический объект, например, с oMyClass2 = new MyClass ();].
Если код находится внутри объявления класса:
class Fred {
MyClass oMyClass1;
MyClass oMyClass2 = null;
}
, то он будет выполняться только во время конструктора Fred.Пространство (для объекта Fred, включая пространство для двух ссылок MyClass) уже будет выделено в куче до вызова конструктора.Две строки кода на самом деле не будут иметь никакого эффекта, поскольку пространство уже будет инициализировано нулем.
Если оно находится внутри объявления структуры, эффект будет аналогичным, только в стеке (если структураявляется локальной) или память глобальной переменной (если структура является статической).[Хотя, если честно, я немного не уверен, где статика выделяется в C # - я просто предполагаю, что это делается аналогично C ++]