Rychlé shrnutí toho, co můžete najít na internetových diskusích.
- Statická metoda (ve skutečnosti operátor), které musíte zadat známý typ třídy.
- Provedeno při kompilaci.
- Z předchozí poznámky plyne, že typ (zadané třídy) musí být definován buď v aktuální assembly nebo v assembly, která je referencovaná z aktuální.
- Nemůže být přetížen.
- Slouží k získání typu známé třídy.
- Volání provedeno při běhu programu.
- Musíme mít instanci objektu, jehož typ chceme získat.
- Slouží pro získání neznámého typu objektu.
- Pomalejší než typeof.
- Vrací základní typ objektu, který se může lišit od typu objektu, který na něj odkazuje:
class BazovaTrida {}
class OdvozenaTrida: BazovaTrida {}
class Priklad
{
static void VratTyp(BazovaTrida b)
{
Console.WriteLine(typeof(BazovaTrida));
Console.WriteLine(b.GetType());
}
static void Main()
{
VratTyp(new OdvozenaTrida());
}
}
BazovaTridaPrvní řádek není nijak překvapivý. Ale u druhého řádku se na chvíli zastavíme. Metodě VratTyp předáváme jako argument objekt typu OdvozenaTrida. Uvnitř metody VratTyp na druhém řádku voláme GetType na objektu typu BazovaTrida. A dostávámé jako výsledek typ Odvozená třída. Takže dostáváme jako výsledek skutečný typ (OdvozenaTrida) a ne typ objektu, který na něj odkazuje.¨
OdvozenaTrida
- Slouží k získání typu, ke kterému nemáme z aktuální assembly přístup, za předpokladu, že známe celý název typu včetně assembly, ve které je definován.
- Pouze pro assembly, které jsou nahrány z disku (tzn. ne pro dynamicky nahráté assembly).
- Voláno za běhu programu.
- Pokud je voláno s názvem typu bez udání assembly, vyhledává pouze v aktuální assembly a v mscorlib.dll.
Zdroje:
- http://stackoverflow.com/questions/5451035/c-performance-question-typeofmyclass-vs-this-gettype
- http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_GetType_and_typeof
- http://msdn.microsoft.com/en-us/library/58918ffs(v=VS.100).aspx
- http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx
- http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx
Žádné komentáře:
Okomentovat