Це може бути поганою практикою, якби не той факт, що вже досить очевидно, про що ви говорите у своєму коді, виходячи з контексту.
Dog = new Dog();
Який конструктор типу? Який об’єкт? Не плутаєте? Добре, як щодо
Dog = Dog.Create()?
Який об’єкт? Який статичний заводський метод за типом? Все ще не плутати? Я так не думав.
Єдиний раз, коли я бачив, що це є потенційною проблемою, - коли дерево простору імен стає досить досконалим, і компілятор не може з'ясувати неоднозначність, і в цьому випадку ви виявите щось подібне
Dog = new Some.Namespace.Dog();
У будь-якому випадку, це має відбуватися лише з автоматичними властивостями (а можливо, і перерахунками), оскільки локальні назви змінних завжди є camelCrozen, уникаючи двозначності повністю.
dog = new Dog();