Я не думаю, что с этим можно что-либо сделать, если вы хотите взаимодействовать, например, если вы хотите, чтобы публичный метод ISecond
принял параметр IFirst
, тогда IFirst
должен быть публичным и т. Д.должны все свои методы, чтобы пользователи IFirst
всегда могли вызывать методы.
Вы можете проверить реализацию IFirst
, которую вам дают, чтобы увидеть, реализует ли она другой внутренний интерфейс, но если вы не контролируетеотказ от реализации IFirst
, которые передаются в этом, не гарантированно работает (и не гарантируется, что вы работаете, даже если вы контролируете выдачу экземпляров), так как кто-то всегда может передать другую реализацию, которая нене реализует внутренний интерфейс.
Вы можете сделать это, используя вместо этого абстрактный базовый класс, но я не проверял это, просто идея:
public abstract class FirstBase
{
protected internal abstract void Forbidden();
}
public interface ISecond
{
void Test(FirstBase first);
}
internal class Second : ISecond
{
void Test(FirstBase first)
{
first.Forbidden();
}
}