Adlı bir sınıf varsa MyProgram
, " MyProgram " dize olarak almanın bir yolu var mı?
Adlı bir sınıf varsa MyProgram
, " MyProgram " dize olarak almanın bir yolu var mı?
Yanıtlar:
Bunu dene:
this.GetType().Name
nameof
operatörü kullanabilirsiniz .
Bunu iyi bir önlem için kusmak istedim. Sanırım @micahtan'ın yayınlanma şekli tercih ediliyor .
typeof(MyProgram).Name
nameof(MyProgram)
.
Micahtan'ın cevabı iyi olmasına rağmen, statik bir yöntemle çalışmaz. Geçerli türün adını almak istiyorsanız, bu her yerde çalışmalıdır:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Referans olarak, başka birinden miras alan bir türünüz varsa,
this.GetType().BaseType.Name
Türetilmiş sınıflarda buna ihtiyacınız varsa, bu kodu temel sınıfa koyabilirsiniz:
protected string GetThisClassName() { return this.GetType().Name; }
Ardından, türetilmiş sınıfta ada ulaşabilirsiniz. Türetilmiş sınıf adını döndürür. Tabii ki, yeni "nameof" anahtar kelimesini kullanırken, bu çeşitlilik gibi bir ihtiyaç olmayacaktır.
Ayrıca bunu tanımlayabilirsiniz:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Ve sonra şöyle kullanın:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Bunu kullan
Uygulama diyelim Test.exe çalıştıran ve fonksiyonudur fan () içinde form1 [temelde bir sınıf Form1 ], daha sonra kodu, yukarıdaki yanıt altında üretecektir.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Bu geri dönecek.
s1 = "TEST.form1"
işlev adı için:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
geri dönücek
s1 = foo
Bunu istisna kullanımda kullanmak istiyorsanız unutmayın:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
, boş denetim etkin olduğunda bir uyarı alırsınız.
this
göz ardı edilebilir. Mevcut sınıf adını almak için ihtiyacınız olan tek şey:
GetType().Name