Gå til innhold

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


Anbefalte innlegg

Skrevet

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å)

Videoannonse
Annonse
Skrevet

Nei, fordi koden utføres fortsatt under samme klassen med de samme rettighetene, om det er en annen instans spiller ingen rolle, fordi instanser har ingenting med tilgangsnivå å gjøre i det hele tatt.

Skrevet

Jeg sa ikke det var feil, jeg syntes bare det var litt pussig, og lurte på om noen kunne gi meg et fornuftig svar på hvorfor det var slik.

 

Det kunne GeirGrusom. Takk for det.

Skrevet (endret)

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
Skrevet

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...

Skrevet
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.

Skrevet
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 ;-)

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...