Was wählen Sie, geschützt oder intern?

8

Wenn ich eine Klasse mit einer Methode habe, möchte ich protected und internal . Ich möchte, dass nur abgeleitete Klassen in der Assembly in der Lage sind, es aufzurufen.

Da protected internal protected oder internal bedeutet, müssen Sie eine Auswahl treffen. Was wählen Sie in diesem Fall - protected oder internal ?

    
brickner 20.05.2010, 04:53
quelle

5 Antworten

5
  

Ich möchte, dass nur abgeleitete Klassen in der Assembly es aufrufen können.

Nun, Sie haben zwei Möglichkeiten. Du kannst es beschützen, und wenn einer deiner Kunden deine Klasse erweitert und deine Methode aufruft und du es erfährst, kannst du ihnen einen streng formulierten Brief schreiben, der ihnen sagt, bitte hör auf damit. Oder Sie können es intern machen und Codeüberprüfungen des Codes Ihrer Mitarbeiter durchführen, um sicherzustellen, dass sie nicht die Methode verwenden, die sie nicht verwenden sollen.

Meine Vermutung ist, dass letzteres die billigere und einfachere Sache ist. Ich würde es intern machen.

    
Eric Lippert 20.05.2010, 07:17
quelle
6

Persönlich würde ich beschützt wählen. Wenn Unterklassen in Ihrer eigenen Assembly gut genug sind, um die Methode aufzurufen, warum sollte eine Unterklasse in einer anderen Assembly fehlen? Vielleicht könnten Sie die Funktionalität komplett in eine separate (interne) Klasse umgestalten.

Sie müssen wirklich objektiv über den Zweck der Methode nachdenken. Interne Zugänglichkeit fühlt sich fast immer falsch an. Meistens, weil ich versucht habe, von Steuerelementen oder Klassen im .NET-Framework abzuleiten, wo ich in eine Mauer gerannt bin, weil jemand entschieden hat, eine -Klasse oder -Methode als intern zu markieren. Der ursprüngliche Autor hat nie bemerkt, dass der Zugriff auf diese Methode die Implementierung einer Unterklasse erschwert.

BEARBEITEN

Um zu verdeutlichen, ist die interne Zugänglichkeit für eine Klasse sehr nützlich, und ich habe nicht impliziert, dass interne im Allgemeinen schlecht ist. Mein Punkt war, dass interne Methoden in einer ansonsten öffentlichen Klasse mir falsch erscheinen. Eine ordnungsgemäß gestaltete Basisklasse sollte abgeleiteten Klassen in derselben Baugruppe keinen unfairen Vorteil verschaffen.

    
Josh 20.05.2010 05:07
quelle
3

Ich glaube, die richtige Wahl ist internal . Auf diese Weise können Sie Personen außerhalb Ihrer Assembly davor schützen, diese Methode aufzurufen, und Sie müssen nur vorsichtig sein und diese Methode nur von abgeleiteten Klassen aufrufen. Es ist einfacher, in der Versammlung, die du schreibst, vorsichtig zu sein als zu hoffen, dass andere Leute vorsichtig sein würden, wenn sie es benutzen.

    
brickner 20.05.2010 04:53
quelle
1

Es ist so eine eigenartige Entscheidung, protected internal mean protected OR internal zu machen. Für diesen genauen Fall würde ich internal verwenden. Der Grund ist, dass, wenn die Kapselung kaputt ist, würde ich lieber ich wäre, eher jemand, der nicht unter meiner Kontrolle steht.

    
Igor Zevaka 20.05.2010 05:25
quelle
0

Ich denke, die Antwort hängt von Ihren Bedürfnissen ab. Wenn ich du wäre, würde ich so etwas tun:

%Vor%     
Matin Habibi 20.05.2010 05:53
quelle