Как запретить наследование

| | 0 Comment

Наследование (inherit initial unset) | CSS

Наследование CSS-свойств

Большинство свойств не передают дочернему элементу свои значения от родителя

У некоторых значение по умолчанию подстраивается под родителя

И лишь немногие (см. список свойств CSS2, если в графе «Inherited» указано «yes») наследуют значение свойства от родителя

Свойство, меняющее все стили CSS, кроме direction и unicode-bidi

Это те значения, которые можно применить к любому свойству CSS. Везде происходит сброс стиля браузера, в том числе у тегов input , progress и т.д.

CSS наследование стилей от родителя: inherit

Если предку и потомку нужно указать одинаковые значения свойства, то удобней для дальнейшего редактирования использовать inherit — достаточно будет изменить значение только у родителя.

inherit передаёт не конечное значение, а то, что указано в стилях родителя

Пример 1: в чём разница между width: inherit; и width: 100%;

Пример 2: max-height: 100%; не работает

Пример 3: как сделать дубликат стилей CSS родителя

inherit переносит значение непосредственного родителя, а не определённого position

Копируется всё, даже то, что не указано разработчиком в стилях у родителя

initial CSS: отменить наследование

Для того, чтобы узнать начальные значения свойств, которые зависят от браузера, таких как color и font-family , можно применить initial

Пример 1: запретить наследование свойства

Пример 2: убрать свойство для более узкого селектора

initial позволяет сбросить все стили, включая те, что браузер задал для тега по умолчанию

Пример: для сторонних виджетов отключить наследование стиля и стили, установленные браузером

unset CSS: сбросить стиль браузера

Поведение стандартное, только все теги становятся обезличенными, словно их подстригли под одну гребёнку. То есть как и у initial , блочные элементы станут inline .

Пример: обнулить все возможные стили input

Домашнее задание: в комментариях предложить свой пример использования значений inherit, initial и unset, а то у меня фантазия уже исчерпана 🙂

5 комментариев:

Анонимный Здравствуйте!
Не подскажите почему так?
https://jsfiddle.net/og96q6x5/

Почему этот негодяй Н2 сдвигает жёлтый ДИВ в низ. Я вообще хотел без красного. Он жёлтый сдвинул. Я его ещё в один ДИВ так он сдвинул и жёлтый и красный.
Почему?
NMitra Здравствуйте, насколько я поняла вас не устраивает схлопывание? Посмотрите http://shpargalkablog.ru/2011/03/svoistva-margin-padding.html#m-parent Там есть решения проблемы Анонимный Спасибо Вам. Эту пробелку я уже нарыл как решать это схлопывание. Или как у Вас или чистящим ДИВом.

Не у меня другое.
Вот получилось. Что и хотел.
Вроде получилось его усмирить с display:inline-block.
https://jsfiddle.net/og96q6x5/2/

Но вопрос остался. Разве находясь внутри ДИВа он не должен двигаться по этому диву. Никого не трогать?
И почему при display:inline margiņ-top: Не работает?
https://jsfiddle.net/og96q6x5/1/
Анонимный Спасибо Нашёл.
vertical-align: с display:inline; и display:inline-block;

Даа. Как всё это забавно.
NMitra И почему при display:inline margiņ-top не работает? — Потому что он не блочный, у него нет высоты height

shpargalkablog.ru

Как запретить публичное наследование, но разрешить частное (и защищенное) наследование

В С++ 11 было введено ключевое слово final , чтобы запретить будущие переопределения или запретить наследование. Наиболее распространенный пример, где он может использоваться, относится к классам, которые не предназначены для использования в качестве базовых классов (например, не виртуальных деструкторов). Тем не менее, иногда мы можем захотеть иметь отношение is-реализованное-в-термины между двумя классами (т.е. private inheritance), а не is-a отношение ( public наследование). Однако final запрещает оба типа наследования.

Мой вопрос заключается в следующем: существует ли способ разрешить наследование private , но запрещает наследование public (возможно, не напрямую, но по крайней мере мы можем «имитировать» его)? В этом случае проблем не будет, даже если мы будем использовать класс с не виртуальным деструктором, так как мы не можем напрямую использовать производный класс с помощью указателя на базу, поэтому мы должны быть в порядке.

Я думаю о таком коде:

Интересный вопрос! Если вы не возражаете отказаться от тривиальности деструктора, я думаю, что следующее выполняет эту работу:

Не удалось скомпилировать следующий код: static_assert срабатывает, потому что Derived* конвертируется в Base * . Однако, если вы измените наследование на protected или private , тогда компиляция кода.

К сожалению, пользователи все еще могут стрелять в ногу:

Я не уверен, что это то, что вы ищете, или если это поможет вам в вашем случае. Однако я продемонстрирую полиморфное поведение.

Защищенный конструктор Абстрактный класс

Производный класс с возможным наследованием

Производный класс, который нельзя унаследовать от

Я продемонстрировал здесь ключевое слово, запечатанное при работе с наследованием и полиморфизмом. Если вы не хотите, чтобы ваш класс был получен из последующего использования, используйте запечатанное ключевое слово.

Что касается объявления любого базового класса, отдельного класса или одного синглетного класса с частным конструктором, то необходимо использовать ключевое слово friend. Существует множество типов реализаций, которые могут быть задействованы здесь, чтобы показать их, но концепция предотвращения унаследования класса одинакова. Лично я не использовал ключевое слово final, но я использовал ключевое слово запечатанное, и оно работает очень хорошо.

Я не использовал наследование классов, кроме публичного: поэтому, чтобы ответить на ваши вопросы с точки зрения защищенного или частного наследования, я не очень хорошо знаком. Но, возможно, использование ключевого слова sealed может помочь вам.

qaru.site

Как запретить наследование

Тут кто-то спрашивал про то, как запретить наследование — у Страуструпа в FAQ есть ответ с комментариями. Здесь привожу свой перевод (простите за качество, переводил навскидку)

Могу ли я запретить наследоваться от моего класса?
Да, но зачем? На это может быть вообще говоря две причины:

для эффективности: чтобы не пользоваться виртуальными вызовами
для безопасности : чтобы быть уверенным в том, что класс не используется как базовый (к примеру, быть уверенным, что объекты можно безбоязненно копировать [slizing — не знаю что это])

Из моего опыта, боязнь потери эффективности обычно неуместна. В C++ вызовы виртуальных функций быстры настолько, что их использование в классах, спроектированных с виртуальными функциями не даёт заметных издержек в сравнении с альтернативными решениями, использующими обычные функции. Также заметьте, что использование механизма вирутальных вызовов обычно происходит только при вызовах через указатель или ссылку. При вызове функций напрямую для именованного объекта виртуальный вызов может быть довольно просто оптимизирован и не давать вообще никаких издержек.

С другой стороны, когда есть логичная причина на это, запретить дальнейшее наследование можно. К сожалению, решение не самое красивое. Оно опирается на то, что самый последний производный класс [most derived class] в иерархии обязан сконструировать виртуальную базу.

Конец перевода, далее мои комментарии
На самом деле, «некрасивость» решения сводится к тому, что эта техника не может быть легко расширена шаблонами:

Это работать не будет, потому что [7.1.5.3/2]

Поэтому для каждого класса, который хочет воспользоваться подобной техникой и стать финальным в иерархии придётся писать «friend class concrete-class-name-to-be-final».

rsdn.org

Как запретить наследовать переменные класса? — Java SE

Изучаю одновременно C# и Java (простите если не в ту ветку написал)

Ситуация: Есть класс (A), у которого есть 10 переменных, делаю производный класс от него (B extends A).

Вопрос: Как в базовом классе запретить наследовать 4 переменные?
В C# это решается словом «sealed«.
Поискал по форумам, 100 раз на глаза попалось слово «final», думаю: — «хорошо, сделаю эти поля final», сделал, в классе B (для проверки) объявляю переменную с таким же именем и NetBeans мне пишет «Поле скрывает другое поле».

Что хочу: закрыть 4 переменные для наследования.

Как при создании экземпляра класса инициализировать переменные вложенного класса
Здравствуйте. Подскажите пожалуйста как при создании екземпляра класа.

Как перенести int переменные из другого класса
// Как бы ConcurrentHashMap переносит стринг / инт. А переменные random .

Как наследовать конструкторы?
В C# выглядело бы так: class ABC : ParentClass < ABC () : base () .

Как наследовать приватное поле?
простите за глупый вопрос но нигде найти не могу

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; .

Как в классе А у объекта класса B вызвать метод класса B ?
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его.

Если сделать переменную private, то к ней не будет доступа через объект класса!
Единственный выход для каждой такой переменной делать 2 метода (getPerem1 и setPerem1 и т.д.) ?

Добавлено через 34 минуты
Спасибо всем, вопрос решил по-другому.
Решено переделать структуру так, чтобы не создавать базовый класс и класс наследник (будет только 1 класс).

Если кому интересно, зачем это вообще делать:
У меня есть класс, в который просто заливаются данные из таблицы на SQL Server-e, данных очень много (около 40 млн строк).
Далее этот массив я разбиваю на блоки по 30 строк, при этом ключевые поля (вообще их 4, но есть поля (еще 9 шт), имеющие одинаковое значение в разрезе всего блока), так вот, чтобы эту информацию не дублировать 40 млн раз, хотел вынести их в отдельное поле. Вот такие дела.

www.cyberforum.ru

Запрет наследования поля — C#

Запрет на изменение внутреннего состояния поля коллекции, доступное через свойство класса
Привет всем. Возник такой вопрос. Как мне запретить изменять внутреннее.

использование наследования
Преподаватель одолел не могу разобраться помогите пожалуйста. С# Теория В.

Тонкости наследования C#
Имееются следующие классы: public class Parent < public.

Классы и наследования
Задание: В зависимоти от заданного дня нужно выбрать класс и вызывать.

Наследования конструктора
Привет всем, подскажите , а то я не могу сформулировать вопрос для гугла. Суть.

public
Доступ к типу или члену возможен из любого другого кода в той же сборке или другой сборке, ссылающейся на него.

private
Доступ к типу или члену можно получить только из кода в том же классе или структуре.

protected
Доступ к типу или элементу можно получить только из кода в том же классе или структуре, либо в производном классе.

internal
Доступ к типу или члену возможен из любого кода в той же сборке, но не из другой сборки.

protected internal
Доступ к типу или элементу может осуществляться любым кодом в сборке, в которой он объявлен, или из наследованного класса другой сборки. Доступ из другой сборки должен осуществляться в пределах объявления класса, производного от класса, в котором объявлен защищенный внутренний элемент, и должен происходить через экземпляр типа производного класса.

Это интересно:

  • Оформить карту кукуруза по телефону Получайте выгоду от покупок Получайте выгоду от покупок Картой «Кукуруза» удобно расплачиваться в магазинах и интернете. Бонусные рубли возвращаются с каждой покупки: больше покупок – больше бонусных рублей; акции от партнеров «Кукурузы»- до 30% бонусными […]
  • Призвание к наследству это ПРИЗВАНИЕ К НАСЛЕДОВАНИЮ ПО ПРАВУ ПРЕДСТАВЛЕНИЯ ПРИЗВАНИЕ К НАСЛЕДОВАНИЮ ПО ПРАВУ ПРЕДСТАВЛЕНИЯ admin » 18 окт 2013, 12:16 Абраменков Михаил Сергеевич, доцент кафедры гражданского права и процесса Димитровградского филиала Самарской гуманитарной академии, кандидат […]
  • Взрывозащищённые вентиляторы правила Взрывозащищённые вентиляторы правила Вентиляторы предназначены для перемещения взрывоопасных газопаровоздушных смесей категорий IIА, IIВ, групп Т1 - Т4 по классификации ГОСТ 12.1.011-78, в которых скорость коррозии металлов проточных частей вентиляторов не превышает 0,1 […]
  • Расчет пенсии работающему инвалиду Расчет пенсии работающему инвалиду За 299 р Инет+ТВ (100мб/с, 191 канал (40HD))Если у Вас мегафон тариф Включайся, то100 МБ в сек, +10ГБ на тел, за 555 р в мес (заполните заявку, вам перезвонит менеджер и Уточнит цены, так как разные в регионах +-50 р) […]
  • Закон аутизм Закон аутизм Согласно главе 23 налогового кодекса РФ, существует такая вещь, как налоговый вычет , в том числе на покупку лекарственных средств и лечение. Органами соц. защиты при наличии направления выдается1 раз в год адресная помощь при поездке в федеральный центр на […]
  • Сотрудника полиции лишили прав Лишение премии сотрудника МВД Служу в МВД 15 лет, в июле 2012 получил взыскание,в сентябре лишили премии на 100%, законно ли это? На какой срок накладывается взыскание и сколько премий могут ещё лишить? Ответы юристов (2) Лишение премии не является дисциплинарным […]
  • Налоговый кодекс пошлина в суд Статья 333.19. Размеры государственной пошлины по делам, рассматриваемым Верховным Судом Российской Федерации, судами общей юрисдикции, мировыми судьями 1. По делам, рассматриваемым Верховным Судом Российской Федерации в соответствии с гражданским процессуальным […]
  • Ситибанк оформить заявку на кредит Кредит наличными Citibank (СитиБанк) Оформить онлайн заявку, подробная информация об условиях кредитования Краткая информация о кредите: ЗАО КБ "Ситибанк" Лицензия ЦБ № 2557 До 1 000 000 рублей от 12 до 60 месяцев Подробная информация о кредите Банк: ЗАО КБ […]