Разработка библиотеки - поиск действительных вариантов использования для предлагаемой функции - PullRequest
2 голосов
/ 29 марта 2010

Я участвую в создании библиотеки под названием Fasterflect , целью которой является "улучшение опыта разработчика в использовании отражения". Таким образом, он обеспечивает абстракцию, построенную поверх классического отражения, и будет использоваться в точно таких же сценариях.

Ниже показан текущий синтаксис для доступа к членам через экземпляр объекта:

obj.SetPropertyValue( "PropertyWithPrivateSetter", "foo" );
obj.SetFieldValue( "_readOnlyIntegerProperty", 123 );

Один пользователь предложил добавить поддержку доступа на основе lamdba (по аналогии с Fluent Hibernate):

obj.SetPropertyValue<MyClass>( x => x.PropertyWithPrivateSetter, "foo" );
obj.SetFieldValue<MyClass>( x => x.ReadOnlyInteger, Access.CamelCaseField(Prefix.Underscore), 123 );

Мне трудно думать о сценариях, в которых это было бы полезно, учитывая, что рефлексия обычно выполняется для типов, о которых вы не знаете во время компиляции. Мне просто не хватает воображения? Существуют ли допустимые сценарии для отражения, когда вы знаете тип во время компиляции?

Существует некоторый дополнительный контекст для исходного предложения на этом запросе функции NBuilder , и вы также можете просмотреть запрос Fasterflect .

Ответы [ 2 ]

3 голосов
/ 29 марта 2010

Основным сценарием использования будет тот, который вы описываете: свойство с общедоступным геттером, но с частным сеттером. Используя лямбда-выражения, вы обеспечиваете проверку времени компиляции имени свойства (т. Е. Никаких волшебных строк), но все же предоставляете способ установить свойство «только для чтения» с помощью отражения.

0 голосов
/ 29 марта 2010

Чтобы расширить сказанное Ридом (который сказал это более кратко, чем то, что я напечатал), один очень правильный сценарий для этого предназначен для "фабрик только для чтения", которые производят обертки, предоставляющие либо истинные контексты только для чтения, либо предоставляют создание объектов, доступных только для чтения, и избегайте настройки конструктора (т. е. истинно запечатанных классов).

...