답변:
이 시도:
this.GetType().Name
nameof
연산자를 사용할 수 있습니다 .
나는 이것을 좋은 척도로 던지기를 원했다. @micahtan이 게시 한 방식 이 선호 된다고 생각합니다 .
typeof(MyProgram).Name
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 );
}
[Nullable(2)]
null 확인이 활성화되면 경고가 표시되도록 DeclaringType이 선언 됩니다.