Avatar billede boomshanka Nybegynder
14. september 2006 - 10:40 Der er 14 kommentarer og
2 løsninger

Hvilket access level er implicit med "class Foo"

Hej eksperter,

Jeg har efterhånden set en pæn række af eksempler, hvor folk undlader at angive adgangstypen på både klasser og variabler. Eksempelvis skriver folk:

class Foo() {
...
}

istedet for

[internal|internal protected|private|protected|public] class Foo() {
...
}

2 hurtige spørgsmål: Hvilken adgangstype er underforstået, når typen undlades, og er det i virkeligheden et udtryk for dårlig programmeringsstil?
Avatar billede dj_uncas Nybegynder
14. september 2006 - 10:49 #1
I C# er betyder det "private" hvis du undlader access modifier.

Efter min mening er det ikke så pænt at undlade det. Jeg synes i hvert fald det er nemmere at læse hvis der står private. Selvom man godt ved at der implicit står private bruger man alligevel en lille smule hjernekraft på det når man ser klassen for første gang, og det er helt unødvendigt...

Det er dog bare min mening. Jeg ved ikke om Microsoft har sagt noget officielt omkring det.
Avatar billede websam Nybegynder
14. september 2006 - 10:58 #2
I min verden er det dårligt at undlade adgangstypen og dermed forstået at jeg syntes det er dårlig manér.

Så vidt jeg husker er det public den sættes default til, men jeg er ikke sikker.

/Websam
Avatar billede coderdk Praktikant
14. september 2006 - 10:58 #3
dj_uncas har ret så vidt jeg husker, metoder osv er i hvert tilfælde implicit private
Avatar billede websam Nybegynder
14. september 2006 - 10:59 #4
Og det var så private istedet som dj_uncas skriver *GG*

/Websam
Avatar billede coderdk Praktikant
14. september 2006 - 11:03 #5
Der er i øvrigt også en "new" access modifier :) Den er dog kun til nestede klasser og betyder at den gemmer et nedarvet member af samme navn...

Og fra MSDN-hjælpen: "Class members can have any of the five kinds of declared accessibility and default to private declared accessibility. (Note that a type declared as a member of a class can have any of the five kinds of declared accessibility, whereas a type declared as a member of a namespace can have only public or internal declared accessibility.)" - De har vist også glemt "new" :)
Avatar billede boomshanka Nybegynder
14. september 2006 - 11:04 #6
Top nice - så fik jeg endelig nosset mig sammen til at finde et svar. 15 smackers er klar til dj_uncas og tak til alle andre :-)
Avatar billede dj_uncas Nybegynder
14. september 2006 - 11:35 #7
Hvis vi skal snakke om "new" skal vi vel også snakke om "override", som betyder at man overskriver en metode i en klasse længere oppe i nedarvingshierakiet.
Avatar billede arne_v Ekspert
15. september 2006 - 00:14 #8
så vidt jeg ved betyder

class Foo
{
  int Bar;
}

internal class Foo
{
  private int Bar;
}

d.v.s. at der er forskel på default
Avatar billede coderdk Praktikant
15. september 2006 - 00:48 #9
arne_v, Jeg mener jeg så i MSDN-hjælpen at default class accessor'en er private også
Avatar billede arne_v Ekspert
15. september 2006 - 01:22 #10
http://msdn2.microsoft.com/en-us/library/ms173121.aspx

siger

Classes and structs are declared as internal by default unless the keyword public is added to the class definition, as in the previous example.

Og iøvrigt kan top level classes slet ikke være private. Overvej lige hvordan
en sådan skulle bruges.

Samme ref siger:

Classes and structs that are not nested within other classes or structs can be either public or internal.

(der gælder lidt andre regler for nestede klasser)
Avatar billede coderdk Praktikant
15. september 2006 - 01:50 #11
hehe ja du har da ret, det stod da også på de hjælpsider jeg så på tidligere - Ja ingen andre end public og internal giver mening - Og det er internal der er mest privat, så det er naturligvis default :-D
Avatar billede boomshanka Nybegynder
15. september 2006 - 14:41 #12
Doh! Så blev dj_uncas vist snydt på målstregen. Men det viser vel netop også hvorfor det er en dårlig vane ikke at angive adgangstypen... :-)
Avatar billede dj_uncas Nybegynder
15. september 2006 - 21:46 #13
Hehe, ja.. Men det er jo så logisk som det kan være at en klasse ikke kan være private...

Men med metoder, fields og properties gælder det stadig at "intet = private"...
Avatar billede boomshanka Nybegynder
16. september 2006 - 08:17 #14
Det er rigtigt - mit spørgsmål gik både på klasser og variabler når jeg læser mit eget indlæg igennem igen :-)

dj_uncas, det var en fejl at afvise dit svar. Hvis du smider et svar, så råder jeg bod på det. Arne, du smider også bare et svar så får du dine point.
Avatar billede dj_uncas Nybegynder
16. september 2006 - 11:57 #15
Ok. Tak for godt team work arne_v ;-)
Avatar billede arne_v Ekspert
16. september 2006 - 17:43 #16
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester