# Частина IV інтерв'ю з Anders Hejlisberg

<datetime class="hidden">2004-05-12T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, C#, Software Development -->
Зв'язаний з іншими 3 [ось частина 4](http://www.artima.com/intv/nonvirtualP.html) , дуже цікаві речі про віртуальні методи C#
Це дуже цікава річ (на мою думку це так!)... Тут є розділ на " цитатах " і віртуальних методах... Частина Java має значення SO!

Білл Веннерс: Що ви маєте на увазі під вхідним і вихідним контрактом?

Anders Hejlsberg: Вхідний контракт - це те, що я використовую для виклику методу. За його допомогою я можу розмірковувати про те, що я повинен робити перед тим, як викликати у цей метод, і про те, що сталося після повернення методу. Вихідний контракт - це те, що я використовую для заміни методу. Якщо ви поглянете на більшість програм API, насправді, це дуже погано для документування того, що ви повинні робити, коли ви перевизначите віртуальний метод: Що таке invants перед тим, як ви зателефонуєте? Що ж повинно бути правдою після? Які методи ви не можете викликати з вашої реалізації? І так далі. На мою думку, дуже небезпечно вважати, що типово всі способи мають і вхідні, і в' язні аспекти. Небезпечно довіряти будь- кому, коли ви пишете документацію про перевизначення і те, що невиключається.

Я можу показати вам дуже реальну світову проблему з версіями, яку ми зараз бачимо з досвіду разом з Java. Кожного разу, коли вони пересилають нову версію бібліотек класу Java, виникає розрив. Кожного разу, коли вони представляють новий метод у базовому класі, якщо хтось у похідному класі має метод з такою ж назвою, то метод тепер є перевизначеним, якщо він має інший тип повернення, він вже не компілюється. Проблема полягає в тому, що Java, а також C++ не вловлюють значення програміста з повагою до віртуального.