У меня есть два класса в пространстве имен, и эти классы должны вызывать друг друга так:
public class A
{
void MethodVisibleToB() {}
}
public class B
{
void MethodVisibleToA() {}
}
Я хочу, чтобы методы не были видны ни внутри dll, ни снаружи.Я хотел, чтобы только класс A видел B.MethodVisibleToA
, а только класс B - A.MethodVisibleToA
.
Я обычно ограничиваю видимость метода с вложенными классами, но на этот раз это невозможно, а также излишне сложно.Можете ли вы предложить способ запретить вызов этих методов извне?
Опции, которые у меня сейчас есть, не так хороши:
- сделать все общедоступными (meh),
- сделать все внутренним и переместить A и B в другую dll (не выполнимо)
Edit : я забыл упомянуть, что классы находятся в одном и том же пространстве имен в одном и том жесборка
Решение : Я принял предложение Мринала Камбоя и реализовал интерфейсы явно:
internal interface IA
{
void VisibleByB();
}
internal interface IB
{
void VisibleByA();
}
public class A : IA
{
void IA.VisibleByB() { }
}
public class B : IB
{
void IB.VisibleByA() { }
}
Событие более извращенное решение извращенной проблемы :это предотвратит доступ к двум интерфейсам и относительным методам из других классов и даже подклассов:
public static class ClassAreNotMeantToBeUsedThisWay
{
interface IA
{
void VisibleByB();
}
interface IB
{
void VisibleByA();
}
public class A : IA
{
void IA.VisibleByB() { }
}
public class B : IB
{
void IB.VisibleByA() { }
}
}