Öffentliche und Interne Mitglieder in einer Internen Klasse?
Ok, so kann dies ein bisschen eine dumme Frage, und es ist sicherlich die offensichtliche Antwort, aber ich war neugierig, ob ich es verpasst habe allen Feinheiten hier.
Ist, gibt es einen Unterschied im Hinblick auf die Sichtbarkeit/Nutzbarkeit zwischen einem public
Mitglied erklärt in einem internal
Klasse und ein internal
Mitglied erklärt in einem internal
Klasse?
d.h. zwischen
internal class Foo
{
public void Bar()
{
}
}
und
internal class Foo
{
internal void Bar()
{
}
}
Wenn Sie deklariert die Methode als public
und auch virtual
, und dann überschrieb er in einer abgeleiteten Klasse public
, der Grund für die Verwendung dieser Modifikator ist klar. Allerdings ist dies die einzige situation,... bin ich etwas fehlt noch?
- Wenn Sie erklärt die Methode als öffentlich und auch virtuell, und dann überschrieb er in einer abgeleiteten Klasse, der public meeeep!: Sie sind nicht erlaubt, um die Sichtbarkeit zu erhöhen, nur Umgekehrt: Sie können erstellen einer abgeleiteten Klasse eine öffentliche Klasse, die interne (oder sogar verschachtelt und privat)
- Googler beachten Sie: Dies nahezu doppelte question enthält eine weitere, besonders ausgezeichnete Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten diesen Fall:
Hier C. Bar, die nicht als intern gekennzeichnet; dies ist ein Fehler, weil C. Bar zugegriffen werden kann, von einem Anrufer von D. GetBar():
public
oderinternal
modifier in einerinternal
Klasse. In anderen Fällen sind Sie gleichwertig, wie es scheint.Einen
public
Mitglied ist gerade nochinternal
wenn in eineminternal
Klasse.Aus MSDN:
Denken Sie an es auf diese Weise, würde ich Zugriff auf eine
public
Eigenschaft auf....? Eine Klasse, die ich nicht sehen kann? 🙂Eric ' s Antwort ist in diesem Fall sehr wichtig, wenn es ausgesetzt ist, werden über eine Schnittstelle und nicht direkt es hat einen Unterschied machen, hängt nur davon, wenn Sie in dieser situation mit dem Mitglied, das Sie zu tun haben.
public
Mitglied einerprivate
- Klasse ist deutlich breiter gefasst als eineprivate
Mitglied einerprivate
Klasse (Das ehemalige Projekt breit, wobei letztere Klasse nur).Nur konfrontiert mit einem anderen Beispiel, wo es ist Unterschied zwischen diesen beiden, die bei Verwendung von XAML in WPF.
XAML:
Code mit
internal
enum erfolgreich kompiliert:Aber überraschend ändern, um
public
Ergebnisse in Fehler:Dem letzten Beispiel erzeugt Kompilierungsfehler:
Leider, ich kann nicht erklären, was ist Los mit
public
in diesem Fall. Meine Vermutung ist, "nur weil WPF funktioniert so nicht". Nur ändern modifier der geschachtelten Klasseinternal
um loszuwerden des Fehlers.public
Mitglieder einerinternal
Klasse überschreiben könnenpublic
Mitgliederpublic
Basisklassen und daher ein wenig mehr ausgesetzt... wenn indirekt.Wenn es um die Reflexion es ist wichtig, wenn das Mitglied öffentlich ist oder nicht:
Sie zum Beispiel auch passieren könnte, eine verschachtelte private Klasse zu einer WPF-Bindung und die Bindung funktionieren würde gegen die öffentlichen Eigenschaften, die Sie einfach wie gewohnt.