Можно ли проверить во время компиляции, что тип помечен атрибутом Serializable? - PullRequest
0 голосов
/ 26 января 2011

В частности, мы делаем наше приложение совместимым с сервером состояния сеанса вне процесса, где все типы, сохраненные в сеансе, должны быть сериализуемыми.

Есть ли способ увидеть во время компиляции, что любой тип, помещенный в HttpSessionState, помечен атрибутом Serializable.Что-то вроде этого «недействительного» кода

public static void Put<T>( string key, T value ) where T : IsMarkedWitheSerializableAttribute
{
   HttpContext.Current.Session[key] = value;
}

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Нет, такого общего ограничения нет. Атрибуты обычно предназначены для указания чего-то о реализации типа. Вам нужно будет либо ввести свой собственный интерфейс маркера (urgh), либо вставить проверку времени выполнения и надеяться, что тестирование будет достаточным.

Пост Эрика Липперта о свойствах и атрибутах хорошо читать здесь. Это не совсем тот же вопрос, так как он больше говорит об объектах против типов, но он все еще актуален с точки зрения атрибутов, выражающих механику .

2 голосов
/ 26 января 2011

Вы можете написать собственное правило FxCop для генерации предупреждений для этого сценария.

У Джейсона Блока есть пример правила на его сайте .

...