C # 자체 클래스 이름 얻기 있으면 ” MyProgram “을 문자열로 검색하는

라는 클래스 MyProgram가 있으면 ” MyProgram “을 문자열로 검색하는 방법이 있습니까?



답변

이 시도:

this.GetType().Name

답변

나는 이것을 좋은 척도로 던지기를 원했다. @micahtan이 게시 한 방식 이 선호 된다고 생각합니다 .

typeof(MyProgram).Name

답변

C # 6.0에서는 nameof연산자를 사용할 수 있습니다 .

nameof(MyProgram)

답변

micahtan의 대답은 좋지만 정적 방법으로는 작동하지 않습니다. 현재 유형의 이름을 검색하려면이 유형이 모든 곳에서 작동해야합니다.

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;

답변

참고로, 다른 유형에서 상속되는 유형이 있으면 사용할 수도 있습니다.

this.GetType().BaseType.Name

답변

파생 클래스에서 이것이 필요한 경우 해당 코드를 기본 클래스에 넣을 수 있습니다.

protected string GetThisClassName() { return this.GetType().Name; }

그런 다음 파생 클래스에서 이름에 도달 할 수 있습니다. 파생 클래스 이름을 반환합니다. 물론 새로운 키워드 “nameof”를 사용할 때는 이러한 다양한 행동이 필요하지 않습니다.

게다가 이것을 정의 할 수 있습니다 :

public static class Extension
{
    public static string NameOf(this object o)
    {
        return o.GetType().Name;
    }
}

그런 다음 다음과 같이 사용하십시오.

public class MyProgram
{
    string thisClassName;

    public MyProgram()
    {
        this.thisClassName = this.NameOf();
    }
}

답변

이것을 사용하십시오

Application Test.exe 가 실행 중이고 form1 [기본적으로 form1 클래스 ] 에서 함수가 foo () 라고 가정 하면 위의 코드는 아래 응답을 생성합니다.

string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;

이 반환됩니다.

s1 = "TEST.form1"

기능 이름의 경우 :

string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;

돌아올 것이다

s1 = foo 

예외적으로 이것을 사용하려면 다음을 사용하십시오.

catch (Exception ex)
{

    MessageBox.Show(ex.StackTrace );

}