Pull to refresh

C#: Этюды, часть 2

.NET *
Продолжение, начало здесь

Начну с соцопроса: какие Вы знаете способы выполнить код до начала функции Main() (надеюсь, что перечислят все известные мне и парочку неизвестных :) )?

А теперь задачка:

Перед Вами небольшой код, выводящий два символа (кстати, проверьте себя: в каком порядке они выведутся?). Необходимо вывести подчеркивание "_" между этими символами.
Конечно, задача была бы тривиальной без ограничений. А они следующие:

  • не определять другой метод Main
  • не использовать идентификатор Console в качестве имени класса, свойства, поля и т.д. (спасибо irc-юзеру Gopneg)
  • не изменять код всех существующих методов: App.Main, X.X, Y.Y
  • не изменять определение поля X.y
  • не добавлять новые поля в класс X


using System;<br><br>class Y<br>{<br>  public Y()<br>  {<br>    Console.Write("0");<br>  }<br>}<br><br>class X<br>{<br>  public X()<br>  {<br>    Console.Write("o");<br>  }<br>  Y y = new Y();<br>}<br><br>class App<br>{<br>  static void Main()<br>  {<br>    X x = new X();<br>  }<br>}<br><br>* This source code was highlighted with Source Code Highlighter.


Желаю удачи!

PS
итак, у нас два победителя: mace был первым и угадал авторское решение: http://habrahabr.ru/blogs/net/77039/#comment_2241079
а хабраюзер bobermaniac предложил способ элегантно обойти моё ограничение на переопределение Console: http://habrahabr.ru/blogs/net/77039/#comment_2241109

Кстати, вопрос о вызове кода до Main всё еще актуален! Пока предложен самый очевидный — статический конструктор класса.

PPS
Внезапно, еще одно решение предложил SHSE: http://habrahabr.ru/blogs/net/77039/#comment_2243183, причем основано оно на совсем других механизмах, но прекрасно работает! )
Tags:
Hubs:
Total votes 25: ↑17 and ↓8 +9
Views 1.4K
Comments Comments 43