虚拟成员调用构造函数,密封和属性

时间:2014-07-22 15:21:12

标签: c# inheritance override resharper custom-attributes

我有以下结构:

public abstract class A
{
    public abstract string Foo {get;set;}
}

public class B : A
{ 
    public B() { Foo = "test" } //ReSharper: Virtual member call in constructor

    [Bar(1, 2)]
    public override string Foo {get;set;}
}

public class C : B
{
    [Bar(2,3)]
    public override string Foo {get;set}
}

正如您所看到的,我收到了ReSharper关于在Ctor中进行虚拟成员呼叫的警告。所以我想:

  • 制作A.Foo虚拟
  • 使B.Foo覆盖密封

然后我遇到问题我需要用Bar属性装饰属性...

我不需要覆盖Foo中的C,除此之外;有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

如果您在B的构造函数中所做的只是为Foo设置默认值,只需使用带有支持字段的属性并在字段初始值设定项中设置默认值:

public class B : A
{
 private string foo = "test";

 [Bar(1, 2)]
 public override string Foo
 {
  get { return foo; }
  set { foo = value; }
 }
}