Why can’t C# member names be the same as the enclosing type name?

Strictly speaking, this is a limitation imposed by C#, most likely for convenience of syntax. A constructor has a method body, but its member entry in IL is denoted as “.ctor” and it has slightly different metadata than a normal method (In the Reflection classes, ConstructorInfo derives from MethodBase, not MethodInfo.) I don’t believe there’s a .NET limitation that prevents creating a member (or even a method) with the same name as the outer type, though I haven’t tried it.


I was curious, so I confirmed it’s not a .NET limitation. Create the following class in VB:

Public Class Class1
    Public Sub Class1()

    End Sub
End Class

In C#, you reference it as:

var class1 = new Class1();
class1.Class1();

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)