Re[3]: Перегрузка методов + наследование в C#
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.09.07 10:14
Оценка:
Здравствуйте, zelych, Вы писали:

Z>Остаётся вопрос зачем.

Z>Очень неочевидное поведение (или непривычное, по крайней мере).

Возможно авторы языка не хотели, чтобы переопределение (override) одного из унаследованных виртуальных методов, добавленное позже, могло внезапно повлиять на overload resolution уже существующих вызовов методов. Мне это кажется достаточно разумным.
Надо заметить, что в родственных (по крайней мере, по системе типов) языках VB.NET и Nemerle этот вопрос решается по-другому:

Module Program
    Sub Main()
        Dim x As New B
        x.Foo("a")
    End Sub
End Module

Class A
    Public Overridable Sub Foo(ByVal x As String)
        Console.WriteLine("A.Foo(String)")
    End Sub
End Class

Class B
    Inherits A

    Public Overloads Sub Foo(ByVal x As Object)
        Console.WriteLine("B.Foo(Object)")
    End Sub

    Public Overrides Sub Foo(ByVal x As String) ' Вызывается этот метод
        Console.WriteLine("B.Foo(String)")
    End Sub
End Class


По поводу Nemerle смотреть здесь:

This is related to "exclude override" rule, which we found plainly wrong.


Так что, с этим вопросом не все так однозначно, и он является предметом спора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.