Мне интересно, можно ли определить способ или свойство, с которыми могут взаимодействовать только указанные классы.Эксклюзивное заключение контрактов между двумя классами или интерфейсами
Например:
class Thing
{
protected int i;
public virtual int I
{
get
{
return i;
}
}
}
class OtherThing
{
public virtual void ChangeI(Thing thing, int i)
{
thing.i = i;
}
}
Здесь я хочу OtherThing, чтобы иметь возможность получить доступ к я, или защищенный набор метод I в Вещь, несмотря на то, что он определен за пределами Вещь.
Я признаю, что я мог бы просто объявить OtherThing внутри рамки Thing, который затем иметь разрешение на доступ к защищенным пунктов, однако я также хотел бы, чтобы это работать с интерфейсами, чьи реализации не может быть определены в рамках исходного интерфейса и не могут объявлять защищенные методы в любом случае.
Это не может быть строго возможным, но я бы хотел услышать о похожих способах достижения одного и того же, чтобы я мог самостоятельно провести эксперименты.
Заранее спасибо.
Конечно, это не отвечает на вопрос, но сначала подумал, что мне приходит в голову - почему вы хотите нарушить инкапсуляцию «Вещей»? –
Это 'virtual int I {get; } 'указывает, что подкласс может реализовать свойство без использования поля' i'. Тогда OtherThing может установить его на что угодно, это не повлияет на значение свойства. – wigy
Гипотетический, который я изложил, просто в качестве руководства. Я ищу конкретный тип поведения, и если он не существует, я попытаюсь его обойти. Ради простоты и потому, что это вообще не так, давайте предположим, почему «почему» не имеет значения. – user2312610