Потому что DivideByZeroException - это класс, а dds - переменная (объект) этого класса.
Message доступно только у созданного объекта класса DivideByZeroException.
потому что DivideByZeroException.Message - это попытка обратиться к статическому члену класса.
Нет переменной - нет и возможности обратиться к данным.
Если считаешь что так быть не должно - пиши предложение в language design, описывай зачем это надо, во что оно должно компилироваться на уровне IL, и как не сломать существующий код.
А вы её и так, и так не создаете: экземпляр исключения создается при возбуждении исключения (помните синтаксис - throw new Exception() )? А вот чтобы обратиться к полям/свойствам/методам этого экземпляра, надо дать ему имя в конструкции catch и обращаться к нему по этому имени. А при указании в качестве имени экземпляра имени класса, вы, как выше вам написал Василий Банников , как и в любом другом месте, обращаетесь к статическому полю (или свойству) этого класса. Такой вот синтаксис у языка C#: обработчик исключения у него - это обычный блок, никаких специальных соглашений там нет( пока что, по крайне мере ;-) ).
переменная и экземпляр - это разные вещи. Можно создать экземпляр объекта без создания переменной и создать (объявить) переменную без создания экземпляра.
Это да: переменная (ссылочного типа) - это ссылка на экземпляр объекта.
Но при таком понимании переменную "объявляют" (и это во время выполнения практически бесплатно), а "создают" - экземпляр (а вот это таки небесплатно, так как напрягает распределитель памяти) . Я решил, что автор имел в виду второй вариант, потому как не хотел "создавать" что-то там, а потому ответил именно так. Но, возможно, я ошибся в понимании намерений автора.
Объясню проще, class это описание объекта, например, деревянный стул с четырьмя ножками, а есть экземпляр класса, созданный в памяти через new. Так вот смотря на описание объекта, на листочке, например, как можно взять ножку у стула, физического? Читайте основы ООП.