Jika saya memiliki kelas yang dipanggil MyProgram
, apakah ada cara untuk mengambil " MyProgram " sebagai string?
Jika saya memiliki kelas yang dipanggil MyProgram
, apakah ada cara untuk mengambil " MyProgram " sebagai string?
Jawaban:
Coba ini:
this.GetType().Name
nameof
operator baru .
Saya ingin membuang ini untuk ukuran yang baik. Saya pikir cara @micahtan diposting lebih disukai.
typeof(MyProgram).Name
nameof(MyProgram)
.
Meskipun jawaban micahtan itu baik, itu tidak akan bekerja dengan metode statis. Jika Anda ingin mengambil nama jenis saat ini, yang ini harus bekerja di mana saja:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Untuk referensi, jika Anda memiliki tipe yang mewarisi dari yang lain, Anda juga dapat menggunakan
this.GetType().BaseType.Name
Jika Anda membutuhkan ini di kelas turunan, Anda bisa meletakkan kode itu di kelas dasar:
protected string GetThisClassName() { return this.GetType().Name; }
Kemudian, Anda dapat mencapai nama di kelas turunan. Mengembalikan nama kelas turunan. Tentu saja, ketika menggunakan kata kunci baru "nameof", tidak perlu seperti tindakan varietas ini.
Selain itu Anda dapat mendefinisikan ini:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Dan kemudian gunakan seperti ini:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Gunakan ini
Katakanlah Aplikasi Test.exe sedang berjalan dan fungsinya adalah foo () di form1 [pada dasarnya adalah class form1 ], maka kode di atas akan menghasilkan respons di bawah ini.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Ini akan kembali.
s1 = "TEST.form1"
untuk nama fungsi:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
akan kembali
s1 = foo
Catatan jika Anda ingin menggunakan ini dalam penggunaan pengecualian:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
sehingga Anda mendapatkan peringatan saat cek nol aktif.
this
dapat dihilangkan. Yang Anda butuhkan untuk mendapatkan nama kelas saat ini adalah:
GetType().Name