문제
다음 코드를 고려하십시오.
public class MyClass
{
public static string MyStaticMethod()
{
//string className = GetClassNameHere...
}
}
정적 메소드가 상주하는 클래스의 이름을 얻을 수 있습니까? 정적 메소드를 사용하는 IM이라는 사실 때문에이 포인터를 사용하여 현재 작업하고있는 객체의 유형을 검색 할 수 없습니다.
해결책
다음을 시도하십시오
return typeof(MyClass).Name;
또는 또한
return MethodBase.GetCurrentMethod().DeclaringType.Name;
다른 팁
당신은 이것을 할 수 있습니다 ...
String className = typeof(MyClass).Name;
여기에 포인트가 완전히 없어 질 수 있지만 "MyClass"문자열에 어떤 문제가 있습니까?
public class MyClass
{
public static string MyStaticMethod()
{
string className = "MyClass";
Console.WriteLine(className);
}
}
MyClass가 상속되면 대신 상속 클래스의 이름을 원할 것이라고 주장 할 수 있습니다. 그런 다음 다음을 고려하십시오.
public class MyClass
{
public static string MyStaticMethod()
{
string className = typeof(MyClass).Name;
Console.WriteLine(className);
}
}
public class MyOtherClass : MyClass{ }
자, 당신이 호출하면 콘솔에서 무엇을 볼 수 있다고 생각하십니까? MyOtherClass.SomeMethod
? 정답은 "MyClass
". 따라서 클래스 이름을 동적으로 살펴보면 단순히 문자열로 입력하는 것과 동일한 결과를 얻을 수 있습니다. 반사를 통해 볼 수있는 유일한 상승은 클래스의 이름을 바꾸면 올바른 결과를 렌더링 할 수 있습니다. .
이 시도:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MethodBase m = MethodInfo.GetCurrentMethod();
MemberInfo info = (MemberInfo)m;
Console.WriteLine(info.DeclaringType.FullName);
Console.ReadKey();
}
}
}
콘솔에는 "consoleApplication1.program"=)가 표시됩니다.
제휴하지 않습니다 StackOverflow