문제

다음 코드를 고려하십시오.

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"=)가 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top