Как увеличить модификатор доступа свойства

Я подробно рассказал об этом в своем блоге: http://chadkuehn.com/jquery-validate-select2/

Когда вы помещаете Select2 в тег SELECT, он скрывает оригинальный элемент. Так что в плагине проверки вы должны настроить правильную разметку переноса при выделении и выделении.

    highlight: function (element, errorClass, validClass) {
        var elem = $(element);
        if (elem.hasClass("select2-offscreen")) {
            $("#s2id_" + elem.attr("id") + " ul").addClass(errorClass);
        } else {
            elem.addClass(errorClass);
        }
    },

    unhighlight: function (element, errorClass, validClass) {
        var elem = $(element);
        if (elem.hasClass("select2-offscreen")) {
            $("#s2id_" + elem.attr("id") + " ul").removeClass(errorClass);
        } else {
            elem.removeClass(errorClass);
        }
    }

Смотрите DEMO здесь.

10
задан GameFreak 18 September 2009 в 17:03
поделиться

3 ответа

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

public class ChildOne : Parent
{
    public new int PropertyOne  // No Compiler Error
    {
        get { return base.PropertyOne; }
        set { base.PropertyOne = value; }
    }
    // PropertyTwo is not available to users of ChildOne
}

public class ChildTwo : Parent
{
    // PropertyOne is not available to users of ChildTwo
    public new int PropertyTwo
    {
        get { return base.PropertyTwo; }
        set { base.PropertyTwo = value; }
    }
}
11
ответ дан 3 December 2019 в 20:43
поделиться

Вы не можете изменить доступ, но можете повторно объявить член с более широким доступом:

public new int PropertyOne
{
    get { return base.PropertyOne; }
    set { base.PropertyOne = value; }
}

Проблема в том, что это другой PropertyOne , и наследование / виртуальное может работать не так, как ожидалось. В приведенном выше случае (где мы просто вызываем base. * , а новый метод не является виртуальным), вероятно, это нормально. Если вам нужен настоящий полиморфизм выше this, то вы не можете этого сделать (AFAIK) без введения промежуточного класса (поскольку вы не можете new и переопределить один и тот же член того же типа):

public abstract class ChildOneAnnoying : Parent {
    protected virtual int PropertyOneImpl {
        get { return base.PropertyOne; }
        set { base.PropertyOne = value; }
    }
    protected override int PropertyOne {
        get { return PropertyOneImpl; }
        set { PropertyOneImpl = value; }
    }
}
public class ChildOne : ChildOneAnnoying {
    public new int PropertyOne {
        get { return PropertyOneImpl; }
        set { PropertyOneImpl = value; }
    }
}

Важным моментом в приведенном выше является то, что все еще существует один виртуальный член, который нужно переопределить: PropertyOneImpl .

5
ответ дан 3 December 2019 в 20:43
поделиться

НЕТ. Тем не менее, вы можете скрыть унаследованное свойство с помощью Your's

public class ChildTwo: Praent { 
    public new int PropertyTwo { 
       // do whatever you want
    }
}

ps: это больше не отношение виртуальное / переопределение (т.е. нет полиморфных вызовов)

2
ответ дан 3 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

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