System.RuntimeType
adalah kelas beton yang diturunkan dari kelas dasar abstrak System.Type
. Karena System.RuntimeType
tidak bersifat publik, Anda biasanya akan menemukan contohnya sebagai System.Type
.
Kebingungan bisa muncul ketika Anda mencoba untuk mendapatkan tipe sebuah objek dan secara keliru memanggil GetType()
objek lain yang mewakili tipe objek pertama, daripada hanya menggunakan objek itu secara langsung. Kemudian Type.ToString()
akan kembali "System.RuntimeType"
ketika objek yang dipanggil mewakili Tipe:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Misalnya, dalam posting blog ini seseorang mencoba mendapatkan jenis kolom dalam database, melakukan sesuatu seperti ini:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Karena val sudah menjadi objek Tipe, val.GetType () akan mengembalikan objek Tipe lain yang mewakili tipe System.RuntimeTime
karena ini adalah tipe konkret yang digunakan untuk merepresentasikan objek tipe asli. Posting blog kemudian menunjukkan beberapa tipu daya refleksi yang tidak perlu, untuk mendapatkan jenis objek tipe asli, padahal yang dibutuhkan hanyalah:
Type type = reader.GetFieldType(index) as Type;
Jadi jika Type
objek Anda melaporkan bahwa itu mewakili a System.RuntimeType
, pastikan Anda tidak secara tidak sengaja memanggil GetType()
tipe yang sudah Anda dapatkan.