webForumDet fria alternativet

ej static i interface - alternativ?

5 svar · 584 visningar · startad av CokeLight

CokeLightMedlem sedan juni 2000504 inlägg
#1

Hejsan,

av ren nyfikenhet undrar jag om det finns alternativ till att ha static i interface..? Säg att jag vill vara säker på att alla klasser som implementerar IMittInterface alltid har en static metod som gör någonting..? Enda sättet genom arv istället eller..?

emissionMedlem sedan dec. 19996 721 inlägg
#2

En statisk metod är inte en del av klassens kontrakt, och kan därför inte ingå i ett interface. Den kan heller inte vara abstrakt, så ett arv hjälper dig inte heller. Möjligtvis kan du åstadkomma det du vill genom att använda "public static new ....", för att overrida metoden, men någon tvångsimplementering blir det inte.

CokeLightMedlem sedan juni 2000504 inlägg
#3

aha.. tack ok, så det går alltså inte.. är inte det lite skumt..? men då vet jag i alla fall.. =)

GladhMedlem sedan maj 20012 812 inlägg
#4

aha.. tack ok, så det går alltså inte.. är inte det lite skumt..? men då vet jag i alla fall.. =)

Tycker inte det är så skumt, eftersom Interface opererar på objektet och inte klassen, medans din static opererar på klassen och inte objektet.

Dessutom så tror jag knappast ditt Interface kan anropa en statics metod på "sin" klass, eftersom det kan vara olika klasser som interfacet är implementerad på. Du skulle säkert kunna lösa det med reflections (det löser det mesta), men det är inte riktigt meningen att man skall göra så :)

Berätta vad du tänkt dig, så kanske vi kan hitta en annan lösning.

- M

CokeLightMedlem sedan juni 2000504 inlägg
#5

Dessutom så tror jag knappast ditt Interface kan anropa en statics metod på "sin" klass, eftersom det kan vara olika klasser som interfacet är implementerad på.

tack för svaret.. a precis.. det jag tänkte på, i just det här fallet, var mer på det här med kontraktsbiten, inte att jag (t.ex.) ville uppnå polymorfism eller nåt annat.. Ungefär att jag vill vara säker på att klasser som i framtiden implementerar mitt interface alltid ska ha en static metod (resten är privata hjälpmetoder t.ex). I mitt fall höll jag inte på med nåt viktigt så jag tog bara bort metoden eftersom jag inte visste hur jag skulle lösa det =) men jag tänkte att det var "skumt" eftersom man i teorin i alla fall väl skulle tänkas kunna vilja bestämma att nån metod alltid skulle vara static (och intuitivt tänkte jag på Interface).. typ så att consumer klassen alltid visste att den kunde göra MyClass.Calculate() o att det var så konsekvent för den här typen av klasser..

Men jag var mest teoretiskt nyfiken.. applikationen funkar ju även utan denna "feature" :)

GladhMedlem sedan maj 20012 812 inlägg
#6

Ungefär att jag vill vara säker på att klasser som i framtiden implementerar mitt interface alltid ska ha en static metod

Det är det som interfacet är tillför. Att säkerställa att ditt objekt (inte klass) alltid har en vis metod som du kan anropa.

Hade jag varit dig, så hade jag lagt metoden i interfacet, eller ett annat interface och kontrollerat om objektet implementerar det interfacet, och så fall kallar metoden.

- M

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)