2014-07-22 2 views
0

I가 다음과 같은 구조를 속성 : 당신이 볼 수 있듯이, 나는의 ctor에서 가상 멤버 호출을 만드는 방법에 대한 ReSharper에서에서 경고를가상 멤버 호출은, 밀봉하고,

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} 
} 

. 그래서 나는 생각했다 :

  • 메이크업의 A.Foo 가상
  • 메이크업의 B.Foo 재정이

을 봉인하지만 난 Bar 속성과 속성을 장식 할 필요와 나는이 문제로 실행 ..

FooC에 덮어 쓸 필요는 없습니다. 이것을 수행하는 방법이 있습니까?

+0

당신은 일반적인 속성을 만들 수 있습니다 B에서 B의 생성자에 체인을 연결하는 오버로드 된 생성자를 추가합니다. 이렇게하면 생성자에 가상 호출이 없게되고 생성자에 가상 호출이 없게됩니다. B 인감해야 해. –

답변

1

는 푸에 대한 기본 값을 설정하는 것입니다 B의 생성자에서 모든 일을, 그냥 백업 필드 속성을 사용하여 필드 이니셜 라이저에서 기본 값을 설정하는 경우 :

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

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