У меня есть A.Test()
, объявленный как public virtual
и B.Test()
, объявленный как private new
.
Я звоню base.Test()
от C
, который наследует B
.Является ли этот код C# законным?
Этот код компилируется с Mono 2.10.2, но бросает MethodAccessException
:
class A {
public virtual void Test() { }
}
class B : A {
private new void Test() { }
}
class C : B {
public C()
{
base.Test();
}
public static void Main (string[] args)
{
var c = new C();
}
}
Вот исключение я получаю:
System.MethodAccessException: Method TestBug.B:Test() is inaccessible from method TestBug.C:.ctor()
Является ли это правильное поведение?
Выполняет ли это компиляцию в Microsoft .NET или с более новыми версиями Mono?
Что говорит об этом C# spec?
Это зависит от версии C#?
Вы не можете получить доступ к 'private' в подклассе, если вы хотите, чтобы этот метод был скрыт с другим, но доступным в подклассе, u должен использовать' protected' –
. Что вы пытаетесь сделать? Доступ к общедоступному методу A.Test из класса внуков C? – statueuphemism
Похоже, что это ошибка в версии Mono, которую вы используете. –