Gå til innhold

C#: Hvor private er egentlig private? (en pussig ting i C# )


Anbefalte innlegg

Sjekk ut følgende eksempel:

 

class ClassWithPrivateField

{

private string privateString;

private ClassWithPrivateField anotherInstanceOfSameType;

 

public void GetChildString()

{

string foo = anotherInstanceOfSameType.privateString;

}

}

 

Her henter vi ut en private string fra en (potensielt) annen instans av klassen. Man kunne kanskje tro at dette er bare intellisensen som hjelper deg fordi anotherInstanceOfSameType muligns peker på seg selv, men dette gjelder runtime også om man putter inn en helt nytt objekt.

 

Er ikke dette et litt grovt brudd OO-prinsippet?

 

Greit at private betyr tilgjengelig innen klassen, men jeg trodde dette ville bli avgrenset av hver instans.

 

(Om det er noen trøst gjelder det samme for Java også)

Lenke til kommentar
Videoannonse
Annonse

Childklassen din er jo definert i klassen din. Da har "parent"-klassen såklart tilgang til childens variabler. Det er i det samme "scopet" forsåvidt.

 

Er ikke dette et litt grovt brudd OO-prinsippet?

 

Det høres unektelig ut som om du mener dette er feil. Men det er bra med selvtillitt :p

Endret av Manfred
Lenke til kommentar

Jo, jeg er enig i at det ser litt mindre rart ut i dette enkle eksempelet, men hvis du f.eks har en public 'set'er som putter inn et child-objekt som er instansiert fra et helt annet hold, og så fra dette stedet igjen leser ut child sin private variabel via parent-objektet.

 

Klart, det er rævva koding og lite sannsynlig at slike situasjoner oppstår. Er bare likevel noe ved at det er lov som skurrer ved min mentalte mapping, men joa, det er jo innenfor klassen...

Lenke til kommentar
Sjekk ut følgende eksempel:

 

class ClassWithPrivateField

{

private string privateString;

private ClassWithPrivateField anotherInstanceOfSameType;

 

public void GetChildString()

{

string foo = anotherInstanceOfSameType.privateString;

}

}

 

Her henter vi ut en private string fra en (potensielt) annen instans av klassen. Man kunne kanskje tro at dette er bare intellisensen som hjelper deg fordi anotherInstanceOfSameType muligns peker på seg selv, men dette gjelder runtime også om man putter inn en helt nytt objekt.

 

Er ikke dette et litt grovt brudd OO-prinsippet?

 

Greit at private betyr tilgjengelig innen klassen, men jeg trodde dette ville bli avgrenset av hver instans.

 

(Om det er noen trøst gjelder det samme for Java også)

Jeg er enig med deg. Jeg var også av den oppfattning, men det er fordi jeg tidligere har programmert i Clarion som også er OOP og der mener jeg bestemt at reglene er INSTANCE avgrenset og ikke klasse avgrenset. Jeg hadde for noen dager siden en tilsvarende opplevelse i mitt C# program og ble relativt overrasket. Jeg hadde en instans av en klasse definert i en helt egen C# DLL og kunne fra en annen DLL faktisk få tillgang til private data på denne måten so m du skisserer. Overrasker meg at det er den kompillerte koden bak metodene som bestemmer hvilket scope man er i og ikke instansen. Jeg mener jo bestemt at PRIVATE er en regel man setter på dersom dataene skal beskyttes fra omværdnen. Og andre instanser er for meg "omværdnen". Når to objekter av samme klasse kan lese hverandres private data så synes jeg dette er spesiellt.

Lenke til kommentar
Vel, som sagt har ikke instanser noe med dette å gjøre i C#

 

Det har med programmeringsskikk og kodesikkerhet å gjøre, og er mer praktisk en teoretisk basert.

Interresant at dette temaet dukket opp for jeg måtte med en gang studere hjelpefilene til Clarion og det viser seg at noe ala det samme gjelder der også. En variabel (property) som er definert private vil faktisk være public så lenge man er i samme modul. Og jeg som trodde jeg kjente morsmålet mitt ;-)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...