Stworzyłem i zaimplementowałem interfejs jawnie jak poniżej.Dlaczego ta metoda prywatna zostanie wykonana z innej klasy?
public interface IA
{
void Print();
}
public class C : IA
{
void IA.Print()
{
Console.WriteLine("Print method invoked");
}
}
i wtedy wykonywane następujące metody Main
public class Program
{
public static void Main()
{
IA c = new C();
C c1 = new C();
foreach (var methodInfo in c.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
{
if (methodInfo.Name == "ConsoleApplication1.IA.Print")
{
if (methodInfo.IsPrivate)
{
Console.WriteLine("Print method is private");
}
}
}
c.Print();
}
}
a wynik dostałam na konsoli to:
metoda druku jest prywatny
metoda druku wywołany
Moje pytanie brzmi: dlaczego ta prywatna metoda została wykonana z innej klasy?
O ile rozumiem, dostępność członka prywatnego jest ograniczona do jego rodzaju deklaracji, to dlaczego zachowuje się tak dziwnie.
Czy oznacza to, że ograniczenie dostępności dotyczy tylko odniesienia do obiektu, a nie do instancji środowiska wykonawczego? –
@JenishRabadiya Nie, to znaczy, że możesz rzucić obiekt, który implementuje cały interfejs do tego interfejsu, i Dostęp, który nie jest tym prywatnym członkiem: D –
@JenishRabadiya: Nie wiesz, co masz na myśli ... ale jawna implementacja interfejsu jest "nieco" dziwne "- przytoczę trochę specyfikacji. –