Frage

Ich bin ein ziemlich neues C # und .Net Entwickler. Ich habe vor kurzem eine MMC-Snap-Ins mit C # und wurde befriedigt, wie einfach es war zu tun, vor allem, nachdem eine Menge Horrorgeschichten von einigen anderen Entwicklern in meiner Organisation zu hören, wie schwer es ist, in C zu tun ++.

Ich ging so ziemlich das gesamte Projekt an einem gewissen Punkt und machte jede Instanz des „public“ Schlüsselwort „intern“, mit Ausnahme des von der Laufzeit benötigt, um die Snap-In laufen. Was ist Ihr Gefühl auf dieser, sollten Sie in der Regel Klassen und Methoden öffentlich machen oder intern?

War es hilfreich?

Lösung

Ich glaube an Blackbox, wo möglich. Als Programmierer möchte ich eine gut Blackbox definiert, die ich einfach in meine Systeme fallen können, und haben es funktionieren. Ich gebe es Werte, die entsprechenden Methoden aufrufen, und dann aus ihm meine Ergebnisse zurück.

Zu diesem Zweck geben Sie mir nur die Funktionalität, die die Klasse arbeiten aussetzen muss.

über einen Aufzug in Betracht. Um es auf einen Boden zu gehen, ich einen Knopf drücken. Das ist die öffentliche Schnittstelle zu der Blackbox, die alle Funktionen aktiviert benötigt, um den Aufzug in der gewünschten Etage zu erhalten.

Andere Tipps

Ich ziehe Kennzeichnung Klassen als public zu vermeiden, es sei denn, ich meine Kunden explizit konsumieren wollen, und ich bin bereit, sie zu unterstützen.

Statt eine Klasse als internal der Markierung, lasse ich die Zugänglichkeit leer. Auf diese Weise steht public als bemerkenswert, etwas für das Auge aus. (Die Ausnahme, natürlich, verschachtelte Klassen ist, die gekennzeichnet werden müssen, wenn sie auch in derselben Baugruppe sichtbar sein.)

Die meisten Klassen internal werden sollen, aber die meisten nicht-private Mitglieder public werden sollten.

Die Frage, die Sie über ein Mitglied stellen sollten, ist „wenn die Klasse public gemacht wurden möchte ich Mitglied möchte das Mitglied ausgesetzt sein?“. Die Antwort ist in der Regel „ja (so public)“, weil Klassen ohne zugänglich Mitglieder sind nicht viel! internal Mitglieder tun eine Rolle; sie sind ‚Zugang Hintertür‘ nur enge Verwandte gemeint, die in der gleichen Versammlung leben.

Auch wenn Ihre Klasse bleibt intern, ist es schön zu sehen, welche Fronttürelemente sind und welche Hintertür. Und wenn Sie es jemals für die öffentliche ändern gehen Sie nicht zu haben, zurück zu gehen und darüber nachdenken, welche sind, die.

sollten Sie neigen dazu, so wenig wie möglich auf andere Klassen und sorgfältig darüber nachdenken, über in Richtung auszusetzen, was Sie nicht aussetzen und warum.

Gibt es einen Grund, warum Sie benötigen Internal zu verwenden, anstatt Privat? Sie erkennen, dass interne Baugruppenebene Umfang hat. Mit anderen Worten: Interne Klassen / Mitglieder sind zugänglich für alle Klassen in einer Multi-Class-Montage.

Wie einige andere Antworten gesagt haben, in der Regel geht für die höchste Ebene der Verkapselung wie möglich (dh privat), wenn Sie tatsächlich benötigen interne / geschützt / public.

Ich fand ein Problem mit internen Klassen , so viel wie möglich. Sie können nicht haben Methoden, Eigenschaften, Felder, usw. dieser Art (oder Parametertyp oder Rückgabetyp) sichtbarer als interne. Dies führt Konstrukteure zu haben, die intern sind, sowie Eigenschaften. Dies sollte kein Problem sein, aber als eine Frage der Tat, wenn Visual Studio und XAML-Designer verwenden, gibt es Probleme. Falsch positive Fehler, die vom Designer erkannt werden aufgrund der Tatsache, dass die Verfahren nicht öffentlich sind, Benutzerkontrolle Eigenschaften scheinen den Designer nicht sichtbar. Ich weiß nicht, ob andere bereits auf solche Fragen gefallen sind ...

Sie sollten versuchen, sie nur so sichtbar wie möglich zu machen, aber wie oben von Mike gesagt, dies führt zu Problemen mit Benutzersteuerelementen und mit den VS-Designern mit den Kontrollen auf Formulare oder anderen Benutzersteuerelementen.

So als allgemeine Regel, halten alle Klassen und Benutzersteuerelemente, die Sie mit dem Hinzufügen Arent nur die Designer mit so sichtbar wie sie sein müssen. Buf es Sie erstellen ein Benutzersteuerelement, die Sie im Designer verwenden möchten (auch wenn das ist innerhalb der gleichen Assembly) Sie müssen dafür sorgen, dass die Usercontrol-Klasse, seine Standard-Konstruktor und alle Eigenschaften und Events Öffentlichkeit für den Designer gemacht werden mit ihm zu arbeiten.

habe ich ein Problem vor kurzem, wo der Designer würde hält die this.myControl = new MyControl () Linie von der InitializeComponent () -Methode zu entfernen, weil die Usercontrol MyControl als interne zusammen mit seinem Konstruktor markiert wurde.

Es ist wirklich ein Fehler denke ich, denn auch wenn sie als interne markiert sind sie nach wie vor in der Toolbox zeigen im Designer hinzufügen, entweder Microsoft muss nur öffentliche Kontrollen mit öffentlichen Konstrukteurs zeigen, oder sie müssen es mit funktioniert interne Kontrollen als auch.

Es hängt davon ab, wie viel Kontrolle Sie über Code, der es verbraucht. In meiner Java-Entwicklung, mache ich alle meine Sachen public final standardmäßig, weil Getter ärgerlich sind. Allerdings habe ich auch den Luxus der Lage zu sein, etwas in meinem Code-Basis zu ändern, wann immer ich will. In der Vergangenheit, als ich Code für die Verbraucher lösen habe, habe ich immer private Variablen und Getter verwendet wird.

Wählen Sie keinen „Standard“ wählen, was am besten die Sichtbarkeit Bedürfnisse für diese bestimmte Klasse passt. Wenn Sie eine neue Klasse in Visual Studio wählen, wird die Vorlage erstellt wie:

class Class1
{
}

Welche privat ist (da kein Raum angegeben ist). Es liegt an Ihnen Spielraum für die Klasse angeben (oder als privat verlassen). Es soll ein Grund sein, um die Klasse zu belichten.

Ich mag die Dinge so wenig wie möglich auszusetzen. Private, protected, internal, öffentlich:. Gibt Klassen, Variablen, Eigenschaften und Funktionen die geringste Menge an Sichtbarkeit für alles, was sie brauchen, um noch arbeiten

Ich werde nur etwas die Sicht auf der Kette in Richtung Öffentlichkeit stoßen, wenn es gibt einen guten Grund.

ich mit den Antworten völlig anderer Meinung so weit. Ich fühle, dass interne eine schreckliche Idee ist, von einer anderen Anordnung verhindert, dass Ihre Typen erben, oder sogar mit Ihrem internen Typen sollte die Notwendigkeit einer Vermeidung des Problems zustande kommen.

Heute hatte ich Reflexion, um zu verwenden, um die Interna eines System.Data.DataTable zu bekommen (ich habe schnell eine Datentabelle Blitz zu bauen, ohne alle seine Kontrollen), und ich hatte Reflexion zu verwenden, da nicht ein einziger Typ war ich zur Verfügung; sie alle als interne markiert wurden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top