Я хочу, чтобы конкретный метод в одном классе мог быть доступен только определенному классу. Например:
public class A
{
public void LimitedAccess() {}
public void FullAccess() {}
}
public class B
{
public void Func()
{
A a = new A();
a.LimitedAccess(); // want to be able to call this only from class B
}
}
public class C
{
public void Func()
{
A a = new A();
a.FullAccess(); // want to be able to call this method
a.LimitedAccess(); // but want this to fail compile
}
}
Есть ли ключевое слово или атрибут, которые я могу использовать для обеспечения этого?
UPDATE:
В связи с существующей сложностью системы и временными ограничениями мне понадобилось решение с низким уровнем воздействия. И я хотел, чтобы во время компиляции указывалось, что функция LimitedAccess() не может быть использована. Я надеюсь, что Джон Скит ответит, что именно то, что я просил, не может быть сделано на С#.
Вопрос и ответ Джона полезны тем, кто может столкнуться с этим позже. И тот факт, что этот дизайн пахнет, может надеяться, убедит кого-нибудь в том, что он выбрал что-то подобное в качестве желаемого решения.
Как упоминалось в комментарии, разговор С# friend полезен, если вы пытаетесь решить подобную ситуацию.
Что касается моего конкретного решения: "зачем A содержать B-логику" (задается @sysexpand в комментариях). Что руб. B.Func()
был вызван во всей системе, над которой я работаю, но в основном работал на одноэлементном режиме A
. Так что я закончил делать, двигая B
Func()
в A
и делая A.LimitedAccess()
частным. Было несколько других деталей для работы, как всегда, но я получил решение с низким уровнем воздействия, которое давало мне ошибки времени компиляции для вызывающих абонентов на A.LimitedAccess()
.
Спасибо за обсуждение.