27. februar 2008 - 19:33Der er
22 kommentarer og 1 løsning
Lave en begrændset klasse?
Hejsa
Ligesom man kan med interfaces, hvor jeg har en klasse med metoder, men jeg vil f.eks have at det program der skal bruge denne klasse kun må få adgang til nogle af metoderne, så derfor laver jeg et interface hvor jeg kun definere de metoder som han må bruge.
Kan man gøre det samme med fields i en klasse? altså lave en base klasse, og så lave f.eks to forskellige "interfaces" der hver især har adgang til visse fields i denne klasse, som man kan med interfaces.
en klasse som implementerer interface X og Y, X har property A og B, Y har property B og C, klassen har naturligvis alle tre, properties encapsulater fields
Interfaces er i hvert fald ikke beregnet til at skulle begrænse adgang.
Synes godt om
Slettet bruger
27. februar 2008 - 19:47#4
Altså, jeg laver noget remoting og har en User klasse. Klassen indeholder username, status osv for et chat program. Jeg vil gerne have et objekt over hver user hos clienten også, men i User klassen er der ting som clienten ikke må få adgang til, kun server.
Arne: men man kan jo ikke definere fields i et interface`?
Hvis du skal beskytte et netode eller et felt imod at blive brugt uden for en klasse, så skal du erklære det som:
private - så er det kun klassen semv som bø bruge det. protected - så er det kun klasser som arver fra klassen som må bruge det. internal - så er det kun andre klasser der ligger inde i samme assembly som må bruge det.
Du beskytter ingen ting med et interface. Pointen med et interface er nærmest den omvendte: At definere et minimum af metoder og properties som en given klasse viser udad til. Ikke til at skjule metoder.
Normal accessability virker kun hvis de 2 forskellige consumere er i forskellig kategori.
Hvis ikke saa er en koorperativ loesning med 2 forskellige interfaces en praktisk loesning.
Alternativet (hvis vi antager at de 2 consumere er i forskellige assemblies, men det lyder sandsynligt) er at give dem internal acccess og saa bruge InternalsVisibleToAttribute til at styre adgangen. Men det synes jeg ikke er en paen loesning.
Synes godt om
Slettet bruger
27. februar 2008 - 20:44#12
men hvis jeg har en List<> med mit object, kan jeg så ikke lave en anden klasse der kun har de ting som klienten må se, og så konvertere det til det object?
F.eks:
class User { public string Username; Public string Password; }
class LimitedUser { public string Username; }
User U = new User(); LimitedUser LU = (LimitedUser)U;
... Hvis altså consumer har _adgang_ til originaltypen.
Jeg forstod på trådstarter, at der var tale om en remoting-løsning. Reelt vil det være muligt at implementere med en soap-formatter i stedet for en binær-formatter. I det tilfælde vil det være muligt at generere en clien-class og en server-class, som kun kommunikerer vha. soap. Og altså, sender serveren kun de data til klienten, som klienten må se.
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.