Vra

Met inagneming van "private" is die standaard toegang wysiger vir klas Lede, hoekom is die navraag selfs nodig?

Was dit nuttig?

Oplossing

Dit is vir jou (en toekomstige onderhouers), nie die samesteller.

Ander wenke

Daar is 'n sekere bedrag van verkeerde inligting hier:

  

"Die verstek toegang wysiger is nie private maar interne"

Wel, dit hang af van wat jy praat. Vir lede van 'n soort, dit is privaat. Vir tipes top-vlak hulself, dis interne.

  

"Private is slegs die verstek vir metodes op 'n tipe"

Nee, dis die verstek vir alle lede van 'n tipe -. Eiendomme, gebeure, velde, operateurs, konstruktors, metodes, geneste tipes en enigiets anders wat ek vergeet het

  

"Eintlik, as die klas of struct nie verklaar word met 'n toegang wysiger dit standaard interne"

Slegs vir tipe top-vlak. Vir geneste tipes, dit is privaat.

Behalwe vir die beperking van toegang eiendom vir 'n deel, maar nie die ander, die standaard is basies altyd "as beperkende as kan wees."

Persoonlik, ek dither op die vraag of om eksplisiete wees. Die "pro" vir die gebruik van die standaard is dat dit beklemtoon oral dat jy iets meer sigbaar as die mees beperkende vlak is die maak van. Die "pro" vir uitdruklik spesifiseer dit is dat dit meer voor die hand liggend vir diegene wat nie die bogenoemde reël wel weet, en dit wys dat jy gedink het oor dit 'n bietjie.

Eric Lippert gaan met die eksplisiete vorm, en ek begin om dit heeltemal te leun.

http://csharpindepth.com/ViewNote.aspx?NoteID=54 vir 'n bietjie meer oor hierdie.

Explicitness. Ek gebruik nooit die standaard en altyd uitdruklik voeg die wysiger.

Dit kan wees as gevolg van my Java agtergrond waar die verstek is "pakket" (ongeveer gelyk aan 'interne' in C #) en so die verskil altyd pla my. Ek het gevind dat explicitness verkieslik te wees.

Ek gebruik ook ReSharper nou wat standaard word eksplisiete, so dit net bevestig en versterk my vooroordeel:)

Die private wysiger verduidelik opset.

'n private lid veranderlike is nie bedoel vir direkte manipulasie buite die klas. ontslae / stel Toegangers mag of nie mag nie geskep word vir die veranderlike.

'n private metode is nie bedoel vir gebruik buite die klas. Dit kan wees vir net interne funksionaliteit. Of jy kan 'n verstek konstruktor private om die konstruksie van die klas voorkom sonder om in waardes te maak.

Die private wysiger (en ander soos dit) kan 'n nuttige manier om die skryf van self dokumentering kode wees.

As uitgewys deur Jon kleiduiven in sy boek C # In Diepte , daar is 'n plek in C #, waar die private navraag is nodig om 'n effek te bereik.

As my geheue korrek dien, die private navraag is die enigste manier om 'n privaat scoped eiendom lucky of setter skep, wanneer sy teenoor groter as private toeganklikheid het. Byvoorbeeld:

public bool CanAccessTheMissileCodes
{
    get { return canAccessTheMissileCodes; }
    private set { canAccessTheMissileCodes = value; }
}

Die private navraag is nodig om dit reg te kry, want 'n bykomende eiendom toeganklikheid wysiger net kan vernou die omvang, nie uit te brei nie. (Anders, kan 'n mens in staat gewees het om 'n private (by verstek) eiendom te skep en voeg dan 'n openbare wysiger.)

Private is slegs die verstek vir metodes op 'n tipe, maar die private wysiger is elders gebruik.

Van C # taal Spesifikasie 3.0 (MSDN) Afdeling 3.5. 1

  

Na gelang van die konteks waarin 'n lid verklaring plaasvind, slegs sekere tipes verklaar toeganklikheid word toegelaat nie. Verder, wanneer 'n lid verklaring sluit nie enige toegang wysigers, die konteks waarin die verklaring vind plaas bepaal die standaard verklaar toeganklikheid.

     
      
  • Name het implisiet openbare verklaar toeganklikheid. Geen toegang wysigers word toegelaat op naamruimte verklarings.
  •   
  • Tipes in samestelling eenhede of naamruimtes verklaar kan openbare of interne verklaar toeganklikheid en 'n standaard hê   om interne verklaar toeganklikheid.
  •   
  • lede Klas kan enige van die vyf soorte verklaar toeganklikheid en verstek aan private verklaar toeganklikheid het. (Let daarop dat 'n verklaarde as 'n lid van 'n klas tipe enige van die vyf soorte verklaar toeganklikheid kan hê, terwyl 'n tipe verklaar as 'n lid van 'n naamruimte kan net openbaar of interne verklaar toeganklikheid het.)
  •   
  • struct lede kan openbare, interne, of private verklaar toeganklikheid en standaard moet privaat verklaar toeganklikheid omdat structs implisiet verseël. Struct lede bekend gestel in 'n struct (dit wil sê, nie geërf deur daardie struct) kan nie beskerm of beskerm interne verklaar toeganklikheid. (Let daarop dat 'n verklaarde as 'n lid van 'n struct tipe openbare, interne, of private verklaar toeganklikheid kan hê, terwyl 'n tipe verklaar as 'n lid van 'n naamruimte kan net openbaar of interne verklaar toeganklikheid het.)
  •   
  • Interface lede het implisiet openbare verklaar toeganklikheid. Geen toegang wysigers word toegelaat op verklarings koppelvlak lid.
  •   
  • Opsomming lede het implisiet openbare verklaar toeganklikheid. Geen toegang wysigers word toegelaat op verklarings opsomming lid.
  •   

Vir completenes. En 'n paar mense eintlik verkies eksplisiete in hul kode oor die toegang wysigers op hul metodes te wees.

Vir simmetrie en in ooreenstemming met die kodering style wat graag alles te eksplisiete wees (persoonlik ek hou daarvan ...)

Die gebruik van private uitdruklik seine jou voorneme en laat leidrade vir ander wat jou kode sal ondersteun;)

Sommige kodering style beveel aan dat jy al die "openbare" items eerste, gevolg deur die "private" items. Sonder 'n "private" navraag, kan jy nie dit doen wat reg rondom.

Update: Ek het nie kennis van die "c #" tag op hierdie so my antwoord toepassing meer aan C ++ as om C #

.

Ek gewoonlik laat private uit, maar ek vind dit nuttig vir voering kode:

private   int    x;
public    string y;
protected float  z;

VS:

int x;

public    string y;
protected float  z;

As Robert Paulson het in sy antwoord, die private wysiger is nie net gebruik word op lede, maar ook op tipes . Dit word belangrik, want die verstek vir tipe is internal wat per ongeluk kan lek as jy die InternalsVisibleToAttribute .

Eintlik, as die klas of struct nie verklaar word met 'n toegang wysiger dit standaard interne.

As jy wil dit privaat, gebruik private.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top