VB.net Переопределяемое свойство не совпадает с c # Виртуальное свойство? - PullRequest
0 голосов
/ 26 ноября 2009

Ну, здесь все просто, у вас есть мой код 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 #

Class2

Class2

Выход VB.NET

Class2

{Nothing}

(ничего не печатает, просто печатает пустую строку) Почему vb.net использует базовый класс, когда его переопределяют?

1 Ответ

12 голосов
/ 26 ноября 2009

Должны ли быть переопределения, а не перегрузки?

Public Overrides ReadOnly Property Name() As String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...