Переопределяемые методы в конструкторах с InitMembers()

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

    public Employee()
    {
        this.InitMembers();
    }

    private void InitMembers()
    {
        // Init the collection so it's never null
        this.Territories = new List<Territory>();
    }
    public Employee(string firstName, string lastName): this()
    {
        this.reffirstName = firstName;
        this.reflastName = lastName;
    }
>   public virtual IList<Territory> Territories { get; protected set; }

Где снова > - это код, вызывающий ошибку, однако я получаю параметр intellisense для «Преобразовать в автоматическое свойство», который просто возвращает код к тому моменту, когда он был запущен, и не устраняет проблему. Кто-нибудь знает, какие изменения нужно внести в эту часть, чтобы устранить нарушение fxcop?


person markdigi    schedule 21.07.2009    source источник
comment
У вас есть частный член IList‹Territory›, на котором основано свойство? Если это так, вы можете получить доступ к этому напрямую.   -  person Kim Gräsman    schedule 21.07.2009
comment
Я добавил частного члена private IList‹Territory› _territories; и соответствующее изменение виртуального метода get { return _territories; } установить { _territories = значение; } однако я все еще получаю нарушение.   -  person markdigi    schedule 21.07.2009


Ответы (1)


Ошибка возникает из-за того, что ваш частный конструктор вызывает метод, который можно переопределить из производного класса. Чтобы исправить предупреждение, вам нужно удалить все вызовы виртуальных методов из конструктора.

В приведенном вами примере InitMembers использует this.Territories, что вызывает нарушение. Согласно вашему более позднему комментарию, вы добавили закрытого члена - используйте его вместо этого.

person Pedro    schedule 13.09.2009