Я пишу библиотеку на VB.NET и столкнулся проблемой.
Мне нужно спрятать функцию базового класса, которая была объявлена как Public.
Пример:
- Код: Выделить всё
Imports System.Console
Friend Class Class1
Public Sub fn()
WriteLine("Class 1 fn")
End Sub
End Class
Public Class Class2
Inherits Class1
Private Shadows Sub fn()
MyBase.fn()
WriteLine("Class 2 fn")
End Sub
Public Sub fn2()
WriteLine("Class 2 fn2")
End Sub
End Class
Module Module1
Sub Main()
Dim a As New Class2
a.fn() 'по идеи сдесь должна быть ошибка
a.fn2()
End Sub
End Module
По идеи функция fn объекта a не должна вызываться, но вызывается функция базового класса. Результат:
- Class 1 fn
Class 2 fn2
Сделал тоже самое на С++:
- Код: Выделить всё
__gc class CClass1
{
public:
void fn()
{
Console::WriteLine(S"Class 1");
}
};
__gc class CClass2: public CClass1
{
private:
void fn()
{
Console::WriteLine(S"Class 2");
}
public:
void fn2()
{
Console::WriteLine(S"Class 2: fn2");
}
};
int _tmain()
{
// TODO: Please replace the sample code below with your own.
CClass2 *a = new CClass2;
a->fn(); //компилятор это место не проходит
a->fn2();
return 0;
}
Все как надо.
Может я какое-нибуть слово не знаю?