В следующем сценарии (простите мой псевдокод):Возможно ли иметь встроенный модификатор доступа при создании экземпляра, а не в декларации?
Assembly Lib:
Interface A;
Class 123; //Utilizes multiple properties with a { get; internal set; } pattern.
//Contains more class definitions like Class 123
Assembly Impl: //References Lib
Class MyImpl; //Implements Interface A and utilizes Class 123.
ClientApplication:
//Consumes Interface A
мне было интересно, если есть способ, чтобы класс MyImpl для доступа к набору свойств() класса 123 без использования статический объявленный друг сборок и сохранения тех, set() также скрыт от ClientApplication.
Конечной целью является возможность развертывания таким образом, который позволяет ClientApplication использовать типы из AssemblyLib и возможность отбрасывать новые сборки реализации без необходимости перекомпилировать и распространять Assembly Lib.
Я думал что-то вроде того, как найти способ сделать внутренний модификатор вступать в силу при его создании (Assembly Impl), а не в его объявлении (Assembly Lib), но я не верю, что C# поддерживает что-то подобное.
Я понимаю, что это, вероятно, очень уродливое, если это можно сделать, и я не уверен, что это возможно, но, увы, именно поэтому я здесь! Заранее благодарны за Вашу помощь.
Я не понимаю, почему вы нуждаетесь в MyImpl, чтобы иметь возможность доступа к внутренним элементам 123. Как это связано с «возможностью отказаться от новых сборок реализации без необходимости перекомпилировать и перераспределить Ассамблею Lib»? Как это часто бывает с внутренними элементами, если вы не можете настроить свой дизайн так, как они работают, то, вероятно, что-то не так с вашим дизайном. –
Можете ли вы изменить его таким образом, чтобы классы и интерфейсы Lib-сборщика не определяли настройки для свойств (определяли только геттеры), а затем определяли внутренние сеттеры в сборке Impl? Это имеет смысл только в том случае, если сборка Lib предназначена только для абстрактных классов и интерфейсов, а Impl - это фактическая реализация. –
@BorisB. Это похоже на то, как я пойду. Мне действительно нравится реализация Давидса ниже. – Gyrien