Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4

Сложное наследование (sealed internal а-ля protected internal)

24.02.2014, 15:02. Показов 4486. Ответов 4

Студворк — интернет-сервис помощи студентам
Приветствую Вас и прошу оказать содействие

Вопрос связан с наследованием. Есть 2 тяжелых случая:

1й:
Есть 2 класса A1 и A11:A1, нужно чтобы оба были не наследуемыми (sealed)
Очевидно что A11 можно объявить sealed без сожаления - это будет правильно. А вот А1 объявить как sealed не получится - от него наследуется A11.
Для этого нужна фича по аналогии с (protected internal) (protected вне текущей сборки и public внутри текущей сборки).

2й:
Есть класс C1 и есть классы C11:C1, C12:C1, C13:C1. Нужно чтобы классы C11, C12, C13 были public, а вот класс C1 имел с-ва private вне текущей сборки.

Я понимаю что все это можно обойти с помощью инкапсуляции, делегирования и прочих шаблонов и их комбинаций, но все-же, вдруг есть какое-нить решение "из коробки"?

Слушаю Ваш ответ )))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2014, 15:02
Ответы с готовыми решениями:

Модификатор protected internal
Правильно ли я понимаю, что модификатор protected internal позволяет: получать доступ к членам в самом классе и его производных независимо...

Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.ast.ReferenceExpr
Я новичок. Пробую пока решать простенькие задачки. Работаю в Eclipse. Столкнулся с такой ситуацией. Ввожу часть кода, появляется...

Получить доступ к методам "internal static" находящимся в класе "internal static class"
Спасибо что заглянул. Суть вопроса, не могу понять как вызвать метод в защищённом классе, с публичными классами и приватными методами в...

4
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.02.2014, 23:09
sigmov, в C# есть только 4 общеизвестных модификатора доступа, никаких protected internal, никаких публичных/приватных наследований, никаких виртуальных наследований - все четко и понятно. Поэтому объявляете один класс, как sealed, у второго максимум можете написать sealed для всех методов. Но очевидно, в архитектуре большой косяк. У меня так было, когда список наружу выставлял вместо интерфейса все свои внутренности, это был переход с паскаля на C# и я тогда понятия не имел о четырех китах ООП.
Во втором случае тоже ничего не получится сделать, компилятор выдаст ошибку, если класс-родитель будет иметь более жесткий модификатор, чем наследник, потому что это, опять же, рушит все ООП.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
25.02.2014, 11:37  [ТС]
никаких protected internal
??? msdn
Кликните здесь для просмотра всего текста
protected internal Доступ к типу или элементу может осуществляться любым кодом в сборке, в которой он объявлен, или из наследованного класса другой сборки. Доступ из другой сборки должен осуществляться в пределах объявления класса, производного от класса, в котором объявлен защищенный внутренний элемент, и должен происходить через экземпляр типа производного класса.

Но очевидно, в архитектуре большой косяк
Большой косяк будет, если какой-то доброхот решит напрямую унаследовать свой класс от A1 или C1, а так - все в порядке )))

В защиту 2го вопроса про сокрытие C1 - работает же код
C#
1
2
interface IC {}
public class C : IC {}
заметьте что IC не public
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9662 / 4815 / 762
Регистрация: 17.04.2012
Сообщений: 9,650
Записей в блоге: 14
25.02.2014, 16:51
Цитата Сообщение от sigmov Посмотреть сообщение
Есть 2 класса A1 и A11:A1, нужно чтобы оба были не наследуемыми (sealed)
Сделать internal abstract класс A0 от которого наследовать отдельно А1 и А11. Их сделать sealed
Цитата Сообщение от sigmov Посмотреть сообщение
Нужно чтобы классы C11, C12, C13 были public, а вот класс C1 имел с-ва private вне текущей сборки.
Если я правильно понял, C1 - internal
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.02.2014, 19:14
sigmov,
protected internal
туплю, спс.

Добавлено через 4 минуты
Цитата Сообщение от sigmov Посмотреть сообщение
заметьте что IC не public
мы про наследование интерфейсов или классов говорим, уж определитесь:
C#
1
2
3
4
5
6
7
8
9
    internal class Class1
    {
 
    }
 
    public class Class2 : Class1
    {
 
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2014, 19:14
Помогаю со студенческими работами здесь

Модификатор internal
Как сделать чтобы Value был доступен только через модули A и B? unit A; type T1 = class internal class Value: integer; ...

Internal Error
Кто-нибудь знает, что значит ошибка: F2084 Internal Error: AV0B6570FF-RF5BA2AC4-0Delphi XE2 Update 3, HD FM-проект, видимого эффекта от...

Рефлексия и internal
Балуюсь с рефлексией, изучаю. Столкнулся с вопросом: можно ли с помощью рефлексии создать экземляр internal класса? Создал свой internal...

Internal storage
У меня есть 2 телефона: Samsung ace2 и HTC One V. На первом стоит андроид 2.3, на втором 4.0.3 Мне нужно писать данные в файл. Этот...

Модификатор internal
Правильно ли я понимаю что сущности кода помеченные internal будут видны лишь в границах одного решения в VS?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru