Этот вопрос похож на этот: Restrict method access to a specific class in C++Создание ограниченных методов/полей в C#
Однако, мой вопрос для C#.
Повторим: у меня есть два класса, скажем Foo
и Bar
, которые плотно связаны. Foo
предоставляет метод, который мне нужен только Bar
.
У меня есть представление о том, чего я хочу, но не знаю, как на самом деле это сделать, или знать, существует ли более простой способ. Это предполагает использование какого-то атрибута, который полагается на использование (new StackFrame(1)).GetMethod().DeclaringType
, чтобы запретить доступ. Использование будет выглядеть примерно так:
public class Foo {
[RestrictedUsage(Allow=typeof(Bar))]
public int SomeMethod()
{
// do something
}
}
Есть, вероятно, соответствующие детали я пропавшими без вести на вопрос (я здесь новый) - Я буду уверен, чтобы обновить его, как я иду.
UPDATE: Следует отметить, что Foo
оборачивает существующий UIElement
кто поведение я пытаюсь изменить. Поскольку класс запечатан, его трудно изменить в обычном режиме. Bar
- это класс, который преобразует значения в правильные значения. Bar
не является пользовательским интерфейсом и используется в других местах моего приложения. Foo
не знает, как преобразовать значение (это сложно - вот что такое Bar
), и поэтому я не могу просто обернуть базовый метод.
Jon Skeet дал ответ, который я ожидал, - измените расположение классов (все спасибо ему до сих пор), но я не думаю, что любой ответ применим (хорошие ответы просто не актуальны).
Я уже делал ошибки в коде, ссылаясь на неправильное свойство ...
Я недоверяю код, потому что я не единственный, кто его использует , Так как Foo также является UIElement, он, естественно, также упоминается в другом месте (исключая отдельную сборку). –
Не единственное, кто использует это, не обязательно является причиной для недоверия коду. Регулярно ли ваши коллеги игнорируют задокументированные предупреждения «не используйте этот тип»? Кроме того, только потому, что Foo упоминается в другом месте, это не значит, что он не может быть в своей собственной сборке ... –
В итоге я занял класс. Я немного изменил некоторые другие части, и новый результат велик. Благодаря! –