2013-07-28 2 views
1

내가 쓸 때 : A.v, B.vC.v다른 정적 멤버 값은

public class A 
{ 
    public static int v; 
} 
public class B : A { } 
public class C : A { } 

값은 모두 동일합니다.
다른 정적 값을 저장하려면 어떻게해야합니까?

+5

정적 일 수는 없습니다. –

+1

그 효과를 원하지 않는다면 왜 같은 수업에서 파생됩니까? – jAC

+0

http://msdn.microsoft.com/en-us/library/vstudio/79b3xss3.aspx – MahanGM

답변

4

값은 모두 동일합니다.
다른 정적 값을 저장하려면 어떻게해야합니까?

수 없습니다. A.v, B.vC.v은 모두 동일한 정적 필드를 참조하므로 서로 다른 값을 가질 수 없습니다.

가능한 해결 방법은 BCv을 재 선언하는 것입니다 :

public class A 
{ 
    public static int v; 
} 
public class B : A 
{ 
    public static new int v; 
} 
public class C : A 
{ 
    public static new int v; 
} 

당신이 A.v, B.vC.v 효과적으로 다른 필드를 참조 할 것이다, 그래서 그들은 서로 다른 값을 가질 수있다, 그렇게한다면

.

합니다 (new 수정을 참고, 그것은 당신이 의도적으로 기본 클래스에서 멤버 숨어 있는지 컴파일러 말한다) 당신의 정확한 필요에 따라

을 faester의 솔루션은 더 좋을 수 있습니다.

+0

다시 신고하지 않으면 불가능한 것 같습니다. – Yves

4

그나마 그들을 정적 만들하지만 같은 효과를 얻을 가상 읽기 전용 속성을 사용 : A.v, B.v 및 C.v의

public class A 
{ 
    public virtual int v { get { return 1; } } 
} 

public class B : A { } 

public class C : A 
{ 
    public override int v 
    { 
     get { return 2; } 
    } 
}