Lachrymol Skrevet 18. september 2008 Del Skrevet 18. september 2008 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
GeirGrusom Skrevet 18. september 2008 Del Skrevet 18. september 2008 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. Lenke til kommentar
Manfred Skrevet 18. september 2008 Del Skrevet 18. september 2008 Så du mener bare at C#, Java og alle tar feil, og det bare er du som har forstått det? hehe Lenke til kommentar
Lachrymol Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 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. Lenke til kommentar
Manfred Skrevet 18. september 2008 Del Skrevet 18. september 2008 (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 Endret 18. september 2008 av Manfred Lenke til kommentar
Lachrymol Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 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
HDSoftware Skrevet 22. september 2008 Del Skrevet 22. september 2008 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
GeirGrusom Skrevet 22. september 2008 Del Skrevet 22. september 2008 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. Lenke til kommentar
HDSoftware Skrevet 23. september 2008 Del Skrevet 23. september 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå