9
votes

Modificateur d'accès Meilleure pratique en C # vs Java

Je comprends que la règle de base de l'OOD est de minimiser l'accès à tous les membres d'un objet donné le meilleur que possible.

c # et Java semblent mettre en œuvre le même ensemble de modificateurs d'accès; Cependant, quelque chose qui m'a déshildé depuis quelque temps, c'est pourquoi les cours de Java semblent être principalement déclarés comme public tandis que c # Les classes semblent généralement être déclarées par défaut. y a-t-il une subtilité à ces langues qui impose différences, ou est-ce simplement une question de convention ou de quoi?

Je me trouve fréquemment dans mon code C # (j'abandonnerai habituellement la plupart des classes, à l'exception des classes intérieures, des classes anonymes et d'autres classes de portée et d'utilité étroites) pour tenter de plaire au compilateur, mais je me demande si je peux manque quelque chose d'important.


1 commentaires

(tous les commentaires liés au fait qu'il est fermé comme incomplet; je les ai supprimés, car ils n'ont rien ajouté maintenant que la question est fixée et rouverte)


4 Réponses :


1
votes

Les seules choses que je fais du public sont des variables statiques / finales, qui sont généralement des constantes. Tout le reste est privé et l'accès est effectué via des méthodes GetXXX () et SETXXX (), le cas échéant. Les méthodes SETXXXX () effectuent également toute validation contre les données. Si je dois faire quelque chose de protégé, je le ferai, mais je l'évite habituellement.


1 commentaires

Oui, j'ai voté depuis que votre réponse était correcte avant que je changeais du tout ... Cela a effectivement sauvé accidentellement avant d'avoir eu la dactylographie. merci tho!



6
votes

Je pense que vous avez répondu à votre question. Selon Joshua Bloch, "la règle de base est simple, rend chaque classe ou membre aussi inaccessible que possible." Efficace Java


0 commentaires

0
votes

Moins de "client" (autre code) connaît des travaux intérieurs de vos cours, il bénéficiera davantage ... Simple règle d'abstraction et un pilier fondamental de OOP. La bonne réponse est déjà donnée ci-dessus:

"La règle de base est simple, rend chaque classe ou membre aussi inaccessible que possible." ~ Joshua Bloch


0 commentaires

5
votes

Scoping de Java est légèrement différent de celui de href = "http://msdn.microsoft.com/en-us/library/ms173121.aspx" rel = "NOREFERRER"> C # 'S CLOPING .

Ceci est discuté brièvement dans C # à partir d'un point de vue du développeur Java '' s la même chose, mais Différent: modificateurs d'accès . Ce document est légèrement daté maintenant, mais reste principalement pertinent.

Cette liste a deux erreurs:

  1. c # 's interne est équivalent à la portée par défaut de Java (qui est sa propre portée).
  2. C # 'S interne protégé équivaut à Java's protégé .

    En outre, le document ci-dessus ne mentionne pas ce que les modificateurs d'accès par défaut sont pour les classes, uniquement pour les méthodes et les propriétés / variables.

    Pour référence, la portée par défaut des classes en C # est interne. Java est sa portée par défaut habituelle, comme décrit précédemment.


2 commentaires

Donc, de ce que je rassemble interne est 1 étape du public en termes d'accessibilité. Java n'a pas vraiment de vrais publics que le public n'a aucun sens pour un but général de l'OOD. Le public n'a pas de sens pour la plupart des développements C # à moins que vous n'écrivez à une bibliothèque de classe d'exportation. ainsi par défaut ou interne convient à la plupart des développeurs. cela semble-t-il correct?


Les protéges internes et internes de C # ne sont pas équivalents à la portée par défaut de Java ou à la protection de Java. C # Les classes internes sont accessibles depuis le même assemblage. Les assemblages sont essentiellement .exes ou .dlls. Si Java a permis d'accéder à des modificateurs d'accès par fichier .jar, ce serait similaire, mais n'est pas.