В языках ООП, таких как C# или VB.NET, если я создаю свойства или методы в суперклассе protected, я не могу получить к ним доступ в своей форме - к ним можно получить доступ только в моем классе, который наследуется от этого суперкласса.
Чтобы получить доступ к этим свойствам или методам, мне нужно сделать их public, что отменяет инкапсуляцию, или переписать их в свой класс, что отменяет наследование.
Как правильно это сделать?





Если у вас есть код, который должен попросить класс выполнить определенную операцию, но класс не представляет ваш код со средствами для этого, тогда класс не соответствует вашим требованиям к кодам.
Это немного похоже на высказывание, что у меня есть Автомобиль (Автомобиль) с защищенным рулевым колесом, поэтому я не могу получить к нему доступ. Машина мне ни к чему.
Либо сделайте эти члены общедоступными (или, по крайней мере, внутренними) и используйте их, либо откажитесь от класса и используйте тот, который дает вашему потребляющему коду функции, которые ему нужны.
Возможно, то, что вы действительно ищете, - это интерфейс. Интерфейс содержит элементы, необходимые вашему коду, и вы реализуете этот интерфейс в своем классе. Преимущество здесь в том, что ваш класс может определить, что к членам осуществляется доступ через этот интерфейс, а не через наследующий подкласс.
Извините, не совсем понятно, что вы имеете в виду под словом «в моей форме» - какова связь между вашей формой и двумя классами? Если ваши классы являются элементами управления в одном проекте и вы хотите получить доступ к свойствам из формы, вы должны использовать ключевое слово «internal».
"необходимо сделать их общедоступными, что препятствует инкапсуляции"
Не смешивайте хороший дизайн с правилами неприглядной видимости. Правила видимости сбивают с толку. На самом деле существует два ортогональных вида видимости - подкласс и клиент. Не совсем понятно, почему мы вообще что-то скрывали от наших подклассов. Но мы можем с private.
Вот что важно. Инкапсуляция не означает сокрытие. Защищенные и частные не являются важной частью хорошей инкапсуляции. Вы можете делать хороший дизайн, когда все будет публично (например, так работает Python).
Защищенный / частный материал - в основном - об управлении интеллектуальной собственностью: готовы ли вы взять на себя обязательство (юридически обязывающим образом, "увидимся в суде, если это не сработает") интерфейс? Если в вашей разработке программного обеспечения участвуют юристы, вы заботитесь о том, чтобы добавить защиту и конфиденциальность к тому, чему вы не привержены.
Если вам не нужно иметь дело с юристами, подумайте о том, чтобы сделать инкапсуляцию правильно, но оставьте все публично.
Есть как минимум три способа ограничить круг лиц, которые могут использовать тот или иной метод экземпляра конкретных экземпляров класса:
Если Reflection в сценариях с неполным доверием позволит привязывать несвязанные делегаты к произвольным экземплярам объектов, можно использовать вложенные классы для усиления №3, чтобы получить доступ к полям private для получения незаконного доступа к функциям private; это определенно было бы запрещено вне сценариев полного доверия.