| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Работа с интерфейсами и раелизацией |
| Автор: chip_and_dayl 14.10.2014, 17:40 | ||
| Всем привет. Нужно небольшое пояснение. Есть интерфейс IMyInterface в котором объявлено одно поле X. Есть реализация интерфейса Class1, который содержит данное поле X + добавлено поле с именем Y. И есть Class2 в котором в методе My создаются экземпляры класса. В первом случае есть доступ к полю Y, хотя не должно быть? Во втором случае нет доступа как и ожидалось. В чем проблема?
|
| Автор: mihryak 14.10.2014, 18:16 |
| Первый вариант использует class initializer, которому абсолютно всё равно, как ты объявишь переменную - хоть object; зная о классе и его свойствах, он даёт возможность проинициализировать всё, что возможно. |
| Автор: chip_and_dayl 15.10.2014, 09:24 | ||
А как тогда можно сделать так, что бы при сериализации объекта, поле Y было скрыто?
Добавлено через 2 минуты и 38 секунд Очень нужно скрыть это поле. Иначе держу два класса с разными наборами полей:( |
| Автор: Экскалупатор 15.10.2014, 10:58 | ||
можно так:
IMHO но, скорее всего это больше похоже на косяк, который может вылезти в дальнейшем. Кто то должен всегда помнить, что хоть класс и приходит откуда-то и десериализуется, но все равно в нем есть поля которые никак не заполняются в этом процессе и их кто то должен будет заполнить. |
| Автор: mihryak 15.10.2014, 11:05 |
| Сериализатору тоже абсолютно не интересно, как ты объявил переменную - это, вообще, не так и много кого волнует. Свойства как были у экземпляра. так они и остались, а сериализатор твой, почти уверен, работает с публичными свойствами. Судя по http://james.newtonking.com/json/help/index.html, ты можешь использовать JsonIgnoreAttribute или http://msdn.microsoft.com/en-us/library/z951x24h, чтобы исключить свойство из сериализации. Опоздал Согласен, что попахивает чем-то дурным. |
| Автор: Экскалупатор 15.10.2014, 11:17 | ||||
| [NonSerialized] не работает с свойствами, ему нужны переменные. По крайней мере у меня ругается, если так написать:
для свойств еще подойдет [DataContract]/[DataMember]
|
| Автор: chip_and_dayl 15.10.2014, 11:36 |
| Всем спасибо:) |