Одна из вещей о SubVersion, который раздражает меня, - то, что он помещает свою собственную папку в каждый каталог проекта, тогда как мерзавец только помещает один в корневой каталог. Это не , что большой из соглашения, но небольших подобных вещей складывают.
, Конечно, SubVersion имеет Черепаху, которая [обычно] очень хороша.
Повышающее преобразование и понижающее преобразование массива.
РЕДАКТИРОВАТЬ: Ковариация и Контравариантность - это способность рассматривать определенные типы как одинаковые или не одинаковые в зависимости от состава и семантики наследования. Это не имеет ничего общего с кастингом массивов, и это просто случай, когда в игру вступает ковариация.
Если вы используете модель безопасности CLR (как и мы), тогда вам нужно будет использовать некоторые абстрактные функции для получения и установки текущего принципала, если вы хотите разрешить тестирование, и использовать их при получении или установке принципала. Это позволяет вам получить / установить принципала везде, где это необходимо (обычно в HttpContext
в Интернете, и в текущем потоке в другом месте, например, в модульных тестах). Это будет выглядеть примерно так:
public static IPrincipal GetCurrentPrincipal()
{
return HttpContext.Current != null ?
HttpContext.Current.User :
Thread.CurrentThread.Principal;
}
public static void SetCurrentPrincipal(IPrincipal principal)
{
if (HttpContext.Current != null) HttpContext.Current.User = principal'
Thread.CurrentThread.Principal = principal;
}
Если вы используете настраиваемый принципал, то их можно довольно хорошо интегрировать в его интерфейс,