Строго говоря, это ограничение, накладываемое C #, скорее всего, для удобства синтаксиса. Конструктор имеет тело метода, но его элемент-член в IL обозначается как «.ctor», и у него есть метаданные, немного отличающиеся от нормального метода (в классах Reflection ConstructorInfo наследуется от MethodBase, а не от MethodInfo.) Я не верю есть ограничение .NET, которое не позволяет создавать элемент (или даже метод) с тем же именем, что и внешний тип, хотя я не пробовал.
Мне было любопытно, поэтому я подтвердил, что это не ограничение .NET. Создайте следующий класс в VB:
Public Class Class1
Public Sub Class1()
End Sub
End Class
В C # вы ссылаетесь на него:
var class1 = new Class1();
class1.Class1();