Перегрузки наследованных функций членства

В EF6

modelBuilder.Properties()
    .Where(x => x.GetCustomAttributes(false).OfType<DecimalPrecisionAttribute>().Any())
    .Configure(c => {
        var attr = (DecimalPrecisionAttribute)c.ClrPropertyInfo.GetCustomAttributes(typeof (DecimalPrecisionAttribute), true).FirstOrDefault();

        c.HasPrecision(attr.Precision, attr.Scale);
    });
14
задан 23 January 2009 в 04:28
поделиться

3 ответа

Это называют сокрытие функция родительского элемента. Можно явно назвать его (Bound::rebound(left, right), как @Ates Goral сказал), или можно добавить using Bound::rebound в Вашем Node определение класса.

См. http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9 для большего количества информации

1
ответ дан 1 December 2019 в 12:02
поделиться

Когда Вы объявляете метод в подклассе с тем же именем, но другая подпись, это на самом деле скрывает версию от родителя.

Вы могли обратиться к нему конкретно как Связанные:: восстановление (...) или использование ключевое слово использования.

См. здесь

2
ответ дан 1 December 2019 в 12:02
поделиться

Можно сделать три вещи:

1. Раскройте метод базового класса

, Добавляют using в Node объявление:

using Bound::rebound;
void rebound() { rebound(left, right); }

2. Явно обратитесь к методу базового класса

Использование Связанное пространство имен:

void rebound() { Bound::rebound(left, right); }

3. Определите/переопределите все перегрузки в производном классе

Делегат реализация к базовому классу (если это сделано в заголовке, не должно быть никакого штрафа благодаря встраиванию):

void rebound(const Bound *a, const Bound *b) { Bound::rebound(a, b); };
void rebound() { rebound(left, right); }
[еще 1113] информация: https://isocpp.org/wiki/faq/strange-inheritance#overload-derived

22
ответ дан 1 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: