partial class partial<[partial: where] where> where where : partial<where> {}Рекурсивные шаблоны...
namespace N
{
public abstract class A<B>
{
public abstract void Foo(B x);
public abstract class C<D> : A<C<D>>
{
public abstract class T<E> : C<T<E>>
{
public new class C<F> : T<C<F>>
{
public override void Foo(ТИП x) // Подставить тип сюда
{}
}
}
}
}
}
Я бы вместо дурацких вопросов давал кандидатам эту задачу на полчаса\час в качестве стресс-теста на логическое мышление.
motherfucker
сущ.; = mother-fucker; = muthafucka; = mutherfukka
1) неценз. ублюдок (ещё более грубый вариант от fucker)
You think I'm joking, motherfucker?! — Ты думаешь, я шучу, ублюдок?!
Look at that sexy motherfucker shaking her ass. — Смотри, как эта смазливая сучка виляет задницей.
What gives, motherfucker? — Ну как дела, хрен моржовый?
2) что-то очень большое, сильное, опасное
to fly a 250-passenger motherfucker — управлять 250-местной бандурой
A this is how Trout describes that A-bomb - "a purple motherfucker as big as a boiler of middle-size heat plant". — А вот как Траут описывает ту атомную бомбу - "багровая дура размером с паровой котёл бойлерной средних размеров". (К.Воннегут, "Время назад")
What do you think is the most lethal drink? - A Purple Motherfucker. — Какой напиток самый убойный? -Лиловая Хреновина.
motherfucker
1) Leave me alone, motherfucker — Оставь меня, блин, в покое, придурок
Where are you, where, motherfucker? — Куда ты делся, твою мать?
Rise, motherfucker, you're gonna die — Вставай, сволочь, тебе пришел конец
Just a minute, motherfucker — Одну минуту, гондон
He's the dumbest motherfucker I've ever seen — Такого тупорылого ублюдка, в натуре, еще поискать надо
You'll regret every word you said, motherfucker — Ты, пидор, еще пожалеешь о том, что сказал
2) What gives, motherfucker? — Ну как дела, старик?
Одно из важнейших качеств "хорошего" кода - "хорошее" форматирование. Компилятор способен прочесть любую корректную программу, не важно какой кашей (точнее, кем) она написана. С людьми дело обстоит иначе. Способность быстро понимать чужой код особенно важна, когда над проэктом работают десятки и более разработчиков, находящихся териториально далеко друг от друга. Хорошее Форматирование позволяет единообразно и точно показывать логическую структуру кода, визуально разбивать код на удобные для понимания человеком абстракции.
Основная теорема форматирования гласит, что хорошее визуальное форматирование показывает логическую структуру программы. Демонстративность структуры кода должна преобладать над его красотой, а правила форматирования должны помогать хорошему коду выглядеть хорошо, а плохому - плохо.
Основное влияние на стиль форматирования имеет семантика языка программирования. Например, в языке Python с форматированием особо не повоюешь - язык его строго определяет сам. Блоки кода и подчинение блоков определяются исключительно отступами, т.е. форматированием:
if (x ==
0):
SomeOperator
SomeOperator
SomeOperator
Здесь if (x ==
0):
является единственной частью управляющей структуры, а подчиненные операторы должны иметь положительный от ее
начала отступ.
Управляющие структуры могут иметь вид:
if (x ==
0) [then]
<--then
может быть опущен
SomeOperator
SomeOperator
SomeOperator
end
if;
if (x ==
0) {
<-- начало блока является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
}
<--
конец блока говорит об окончании управляющей конструкции и является эквивалентом end
if;
begin
- end
или {
-
}
)
if (x ==
0)
{
<--
начало блока не является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
}
<--
конец блока
if (x ==
0):
SomeOperator
SomeOperator
SomeOperator
Из всех вариантов хуже всего смотрится вариант 3 (а в HTML - намного хуже :), причем некоторые энтузиасты умудряются делать его еще уродливей:
if (x ==
0)
{
<--
начало блока не является частью управляющей конструкции и визуально ей не подчиняется
SomeOperator
<-- Этот блок на самом деле не подчиняется {
,
хотя визуально выглядит иначе
SomeOperator
SomeOperator
}
<--
конец блока на уровне управляющей конструкции
Или:
if (x ==
0)
{
<-- начало блока не является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator
<-- Этот блок на самом деле не подчиняется {
,
хотя визуально выглядит иначе
}
<-- конец блока
Поубивал бы.
Продолжение следует...
Баян, конечно, но не перестаю сползать под стол.Сейчас на работе придумал новый антипаттерн "Паблик Морозов". Класс-потомок, созданный в соответствии с этим антипаттерном, выдает по запросу все данные класса-предка, независимо от степени их сокрытия.
public DBEngine(String p_connectionString) { _connectionString = p_connectionString; _dbConnection = new SqlConnection(p_connectionString); _dbConnection.Open(); //Рябченко : Еще раз эту строку кто-то закоментирует - руки оборву CheckDatabaseVersion(); }
Товарищ, работающий менеджером в Microsoft, сообщил, что Visual Studio 2008 зарелизится где-то в декабре 2007-го года (что, в принципе, отражает догадки о дате релиза). А, вместе с релизом, мы получим возможность посмотреть исходники .NET Base Class Libraries (System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, System.Text, ...), ASP.NET (System.Web), Windows Forms (System.Windows.Forms), ADO.NET (System.Data), XML (System.Xml), WPF (System.Windows) и даже с комментариями! Спустя месяц планируют добавить WCF, Workflow и LINQ.
Исходники можно будет скачать, как отдельный пакет, или же позволить Visual Studio 2008 скачивать их (вместе с файлами отладки) по мере надобности.
Должен заметить, что я, как и любой другой любопытный разработчик, потратил много времени как на декомпиляцию фреймворковских библиотек, так и на изучение Rotor Shared Source. Часто, без этого тяжело понять, как работают некоторые классы. Скажем, хорошие знания Remoting появились у меня только после просмотра исходников.
Единственное, чего бы не хотелось, - так это good old MFC development style, когда разработчик проводит 90% своего времени в исходных кодах MFC, тщетно пытаясь понять в чем проблема и как это работает.