Back to "Del IV i intervjun med Anders Hejlisberg"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

C# Imported mostlylucidcouk Software Development

Del IV i intervjun med Anders Hejlisberg

Wednesday, 12 May 2004

Länkad till de andra 3, Här är del 4 , mycket intressanta saker om virtuella metoder i C# Detta är verkligen intressant saker (ja, jag tror det är!) ... här är ett avsnitt om "kontrakt" och virtuella metoder ... Java biten är så sant!

Bill Venners: Vad menar du med inkommande och utgående kontrakt?

Anders Hejlsberg: Det inkommande kontraktet är vad jag använder när jag kallar en metod. Det gör det möjligt för mig att resonera om vad jag är skyldig att göra innan jag kallar in metoden och vad som har hänt efter metodens återkomst. Det utgående kontraktet är vad jag använder när jag åsidosätter en metod. Om du tittar på de flesta API:er är de faktiskt mycket dåliga på att dokumentera vad du ska göra när du åsidosätter en virtuell metod: Vad är de invarianter innan du kallas? Vad bör vara sant efter? Vilka metoder kan du inte ringa från ditt genomförande? Och så vidare. Jag tror att det är mycket farligt att säga att som standard alla metoder har både inkommande och utgående aspekter. Det är farligt att lita på alla att skriva bra dokumentation om när man ska åsidosätta och vad invarianter är när överskuggande.

Jag kan visa er ett mycket verkligt versionsproblem, ett som vi faktiskt ser nu från erfarenhet med Java. När de skickar en ny version av Java-klassbiblioteken, uppstår brott. När de introducerar en ny metod i en basklass, om någon i en härledd klass hade en metod med samma namn, är den metoden nu en överordnad – utom om den har en annan returtyp, kompilerar den inte längre. Problemet är att Java, och även C++, inte fångar programmerarens avsikt med avseende på virtuell.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.