Переопределяемые методы в конструкторах -Помощь для исправления - PullRequest
1 голос
/ 20 июля 2009

Я пытаюсь использовать fxCop в проекте C # в качестве основы для стандартов кодирования C #.

Используемый мной проект называется S # arp Architecture и находится в свободном доступе здесь: S # Arp Arch

Теперь, если я запускаю fxCop (большинство вещей уже исправлено), мне нужно исправить ошибку CA2214 fxcop для переопределенных методов в конструкторах.

На данный момент фрагмент кода выглядит следующим образом:

public class Region : Entity, IHasAssignedId<int>
{
    public Region(string description)
    {
        Check.Require(!string.IsNullOrEmpty(description));
        this.Description = description;
    }

    protected Region()
    {
    }

    [DomainSignature]
 >  public virtual string Description { get; protected set; }

    public virtual void SetAssignedIdTo(int assignedId)
    {
        Id = assignedId;
    }
}

Большинство из них называется так в других файлах CD:

public static RegionDto Create(Region region)
{
    if (region == null)
    {
        return null;
    }

    return new RegionDto()
    {
        Id = region.Id,
    >   Description = region.Description
    };
}

Я пытался изменить тип метода (частный / защищенный и т. Д.), Но fxCop и модульные тесты часто противоречат друг другу, fxcop говорит, что он не похож на конструкторы с виртуальными методами, но модуль говорит, что методы должны быть открытыми / защищенный виртуальный или защищенный внутренний виртуальный, поймать 22 лил?

Так что любая помощь по исправлению этого правила fxcop будет признательна, спасибо.

(Ошибка возникает в строке, помеченной>, виртуальный метод get set, а при изменении другой> - там, где он жалуется)

1 Ответ

3 голосов
/ 20 июля 2009

Это просто: "не делай это". Вместо этого:

private string _description;
public Region(string description)
{
    Check.Require(!string.IsNullOrEmpty(description));
    _description = description;
}

protected Region()
{
}

[DomainSignature]
public virtual string Description {
    get {return _description;} 
    set {_description = value;}
}
...