2013-08-16 4 views
1

개체 변수에서 가리키는 클래스를 가져오고 싶습니다.개체 변수에서 클래스 이름 가져 오기

예를 들어, 나중에 Object 변수를 설정하는 StringBuilder 객체의 인스턴스가있는 경우 Object 변수가 StringBuilder 객체를 가리키는 것을 어떻게 든 알 수 있습니까?

예 :

내가 생각하고 여전히 Object보다 더 아무것도 오는 유지할 수있는 모든 조합 typeof(oMyObject) 또는 oMyObject.GetType()를 사용하여 시도
StringBuilder sbText = New StringBuilder(); 
Object oMyObject = sbText; 
// How can I determine that oMyObject points to an instance of StringBuilder object using only oMyObject 

. 이 작업을 수행하는 데 상당히 직선적 인 방법이 있어야하는 것처럼 보입니다. 아마도 거기에 있지만 찾을 수 없습니다.

나는 링크를 제공 한 것과 중복 된 질문으로이 사용자에게 동의해야합니다. 내 질문의 제목이 분명하지 않았을 수 있습니다 (나는 조금 바꿨습니다). 그리고 둘 다에 대한 답변이 같은 방법을 포함 할 수 있지만 다른 질문을 한 사용자는 인스턴스화 할 방법을 찾고있었습니다. 다른 오브젝트와 같은 형태의 오브젝트. 나는 내가 가진 모든 것이 Object 타입의 변수 일 때만 클래스의 이름을 얻는 방법을 찾고 있었다. 나는 Reed가 그 질문을 보면서 제공 한 대답을 결코 생각해 내지 못했을 것이고, 나는이 사이트 또는 더 넓은 Google 검색에서의 검색에서 일어난 일을 상기하지 않는다.

답변

4

GetType()은 런타임시 객체의 적절한 System.Type을 제공해야합니다.

예를 들어,이 "StringBuilder" 인쇄 :

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

//... 

StringBuilder sb = oMyObject as StringBuilder; 
if (sb != null) 
{ 
    // oMyObject was a StringBuilder - you can use sb as needed: 
    sb.AppendText("Foo"); 
} 
: 당신은 단지 특정 클래스 유형을 확인하려면, is (또는 as)이 종종 Type을 얻는 것보다 더 깨끗하게 작동

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

Console.WriteLine(oMyObject.GetType().Name); 

+0

덕분에 리드를. 첫 번째 예제는 내가 찾고있는 것입니다. 나는 하드 코딩 된 클래스 목록과 비교하지 않고 클래스 이름 (예 : StringBuilder, Widget, MyClass 등)을 가져와야했습니다. 그것은 내가하는 일에 불가능할 것입니다. 응답에 다시 한 번 감사드립니다. – dscarr

0

아마도 Type을 개체에 저장하고 있기 때문일 수 있습니다. 이 시도 :

Type myType = sbText.GetType(); 
0

가 어떻게하여 StringBuilder 개체의 인스턴스에 oMyObject 포인트가 필요하면 당신은 그러나이

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 
if (oMyObject is StringBuilder) 
{ 
    StringBuilder sb = (StringBuilder)oMyObject; // safe now as you know type 
    //your code 
} 

을 할 수있는 유일한 oMyObject

를 사용하는 것을 확인할 수 있습니다 객체에 GetType을 사용해야하는 유형을 가져옵니다.

0

이 모든 작동합니다

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

oMyObject is StringBuilder; 
oMyObject.GetType() == typeof(StringBuilder); 

StringBuilder test = oMyObject as StringBuilder; 
if (test != null) 
{ 
    //Do Work 
} 
관련 문제