Akankah GetType () mengembalikan tipe yang paling banyak diturunkan saat dipanggil dari kelas dasar?
Contoh:
public abstract class A
{
private Type GetInfo()
{
return System.Attribute.GetCustomAttributes(this.GetType());
}
}
public class B : A
{
//Fields here have some custom attributes added to them
}
Atau haruskah saya membuat metode abstrak yang harus diterapkan oleh kelas turunan seperti berikut?
public abstract class A
{
protected abstract Type GetSubType();
private Type GetInfo()
{
return System.Attribute.GetCustomAttributes(GetSubType());
}
}
public class B : A
{
//Fields here have some custom attributes added to them
protected Type GetSubType()
{
return GetType();
}
}
c#
inheritance
polymorphism
Mangga yang Kuat
sumber
sumber
Jawaban:
GetType()
akan mengembalikan tipe aktual yang dipakai. Dalam kasus Anda, jika Anda memanggilGetType()
sebuah instanceB
, itu akan kembalitypeof(B)
, bahkan jika variabel yang dimaksud dideklarasikan sebagai referensi keA
.Tidak ada alasan untuk
GetSubType()
metode Anda .sumber
GetType
selalu mengembalikan jenis yang sebenarnya dipakai. yaitu tipe yang paling banyak diturunkan. Ini berarti AndaGetSubType
berperilaku sepertiGetType
dirinya sendiri dan karenanya tidak perlu.Untuk secara statis mendapatkan informasi tipe dari beberapa tipe yang dapat Anda gunakan
typeof(MyClass)
.Kode Anda memiliki kesalahan: tidak
System.Attribute.GetCustomAttributes
mengembalikan .Attribute[]
Type
sumber
GetType selalu mengembalikan tipe sebenarnya.
Alasannya ada jauh di dalam framework .NET dan CLR , karena JIT dan CLR menggunakan
.GetType
metode untuk membuat objek Type di memori yang menyimpan informasi tentang objek tersebut, dan semua akses ke objek dan kompilasi dilakukan melalui instance Type ini .Untuk informasi lebih lanjut, lihat buku "CLR via C #" dari Microsoft Press.
sumber