C# VB.net可重写属性与c虚拟属性不同?

C# VB.net可重写属性与c虚拟属性不同?,c#,vb.net,inheritance,C#,Vb.net,Inheritance,很简单,这里有我的vb.net代码: Public Class Class1 Public Overridable ReadOnly Property Name() As String Get Return Nothing End Get End Property End Class Public Class Class2 Inherits Class1 Public Overloads ReadOnly

很简单,这里有我的vb.net代码:

Public Class Class1
    Public Overridable ReadOnly Property Name() As String
        Get
            Return Nothing
        End Get
    End Property
End Class

Public Class Class2
    Inherits Class1
    Public Overloads ReadOnly Property Name() As String
        Get
            Return "Class2"
        End Get
    End Property
End Class

Module Module1
    Sub Main()
        Dim c2 As New Class2()
        Console.WriteLine(c2.Name)
        Dim c1 As Class1 = CType(c2, Class1)
        Console.WriteLine(c1.Name)
    End Sub
End Module
下面是c代码:

class Class1
{
    public virtual string Name
    {
        get
        {
            return null;
        }
    }
}

class Class2 : Class1
{
    public override string Name
    {
        get
        {
            return "Class2";
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Class2 c2 = new Class2();
        Console.WriteLine(c2.Name);
        Class1 c1 = (Class1)c2;
        Console.WriteLine(c1.Name);
    }
}
我确实要求他们做同样的事情,但是猜猜他们不做什么! C输出

类别2

类别2

VB.NET输出

类别2

{没什么}

它不打印任何内容,只打印一条空行
为什么vb.net在被重写时会选择基类实现?

它应该被重写而不是重载吗

Public Overrides ReadOnly Property Name() As String

是的,它的重写、重载就是添加更多的参数。这显然是正确的答案,但是为什么编译器不给出一个错误呢?因为重载是有效的!对于vb.net,我会选择google重载还是重写,这里有很多很好的解释。