2009-07-14 6 views
7

C#에서는 MyClass 클래스의 인스턴스 인 객체 (예 : myObject)가 있다고 가정합니다. myObject 만 사용하면 고정 회원 인 MyClass에 어떻게 액세스합니까? 나는 일반적으로하지만이 일을 피하려고 것C# - 클래스의 인스턴스가 있으면 클래스의 정적 멤버에 어떻게 액세스하나요?

Type type = myObject.GetType(); 
FieldInfo field = type.GetField("i", BindingFlags.Public | 
            BindingFlags.Static); 
int value = (int) field.GetValue(null); 

매우 취성의 ... :

class MyClass 
    { 
    public static int i = 123 ; 
    } 

class MainClass 
    { 
    public static void Main() 
     { 
     MyClass myObject = new MyClass() ; 
     myObject.GetType().i = 456 ; // something like this is desired, 
         // but erroneous 
     } 
    } 
+6

더 직접적으로 참조 할 수없는 이유를 설명 할 수 있습니까? 약간의 코드 냄새가 있습니다. –

+1

내 메서드는 Block 유형의 매개 변수를 사용하지만 통과 된 실제 인수는 Block의 여러 * 하위 클래스 중 하나 인 클래스이며 각 하위 클래스는 정적 멤버의 고유 한 복사본을 갖습니다. 내 질문의 코드에서 "i"로). – JaysonFix

+3

IMHO, "어떻게해야합니까?"에 대한 가장 좋은 대답은 무엇입니까? "하지 마라." 나는 이것이 그 시대의 하나라고 강력하게 의심한다. – tnyfst

답변

24

당신은 반사를 사용해야 할 것입니다. 다음은 정상적인 상속을 사용하여 대안이다 :

public class MyClass 
{ 
    public virtual int Value { get { return 10; } } 
} 

public class MyOtherClass : MyClass 
{ 
    public override int Value { get { return 20; } } 
} 

그럼 당신은 다만 적당한 값을 얻을 수 myObject.Value를 사용할 수 있습니다. MyClass.i

이 정적 멤버를 사용하기 위해, 당신은 클래스에 대해 알고 있고, 조금 정교한하려면

+0

자세한 내용은 게시자가 MyClass.StaticMember를 참조 할 수 있기 때문에 죽일 것으로 보입니다. myObject가 하나 이상의 클래스가 될 수 있고 개발 중에 어떤 것을 알 수없는 경우에만 실제로 중요합니다. – Robert

+0

@ 로버트 : 그게 바로 그의 상황입니다. 질문에 대한 주석을보십시오. –

+0

하지만 정적이라고 생각합니다. 나도이 문제에 직면 해있다. – mireazma

4

당신은 단순히 사용해야합니다. 그리고 객체 참조를 갖는 것은 부적절합니다. 당신이 모두 동일한 찾고 회원이 2 개 별개의 클래스했을 때 개체가 중요 할 수있는 유일한 방법은 다음과 같습니다

class A { public static int i; } 
class B { public static int i; } 

그러나 A.iB.i 완전히 다른 분야입니다을, 그들 사이의 논리적 관계가 없다. B가 A에서 상속 받거나 그 반대의 경우도 마찬가지입니다.

+1

"myObject만을 사용하여"... – Joey

+0

정적 멤버 i에 액세스하려면 myObject 참조를 사용하고 싶습니다. – JaysonFix

+1

요하네스, 나는 그것을 읽었지만 진짜 (이틱적인) 질문이라고 생각하지 않습니다. –

10

MyClass를 제어하고이를 자주 수행해야하는 경우 액세스 권한을 제공하는 멤버 속성을 추가해야합니다.

class MyClass 
{ 
    private static int _i = 123; 

    public virtual int I => _i; 
} 
관련 문제