Όχι .. δεν είναι έτσι ρε παιδιά τελικά. Όντως η .ReflectedType θα σου
δώσει τον τύπο στον οποίο ορίζεται η μέθοδος που τρέχει ...
Και για του λόγου το αληθές:
using System;
using System.Reflection;
namespace TestGeneric
{
/// <summary>
/// Summary description for AbstractBase.
/// </summary>
public
abstract class
AbstractBase
{
public AbstractBase()
{
//
// TODO: Add constructor logic here
//
}
public string
GetReflectedType(){
return
MethodInfo.GetCurrentMethod().ReflectedType.ToString();
}
}
}
κι ένα παιδί της ...
using System;
namespace TestGeneric
{
/// <summary>
/// Summary description for FirstLevelChild.
/// </summary>
public
class FirstLevelChild : AbstractBase
{
public FirstLevelChild()
{
//
// TODO: Add constructor logic here
//
}
}
}
.. κι ένα παιδί του παιδιού της ...
using System;
namespace TestGeneric
{
/// <summary>
/// Summary description for SecondLevelChild.
/// </summary>
public
class SecondLevelChild : FirstLevelChild
{
public SecondLevelChild()
{
//
// TODO: Add constructor logic here
//
}
}
}
.. κι ένα μικρό Console app που δημιουργεί instances και των δύο, και
καλεί την GetReflectedType() : string τους για να δούμε τι θα γυρίσει
...
static void
Main(string[]
args)
{
FirstLevelChild child1 = new FirstLevelChild();
AbstractBase child2 = new SecondLevelChild();
Console.WriteLine(child1.GetReflectedType());
Console.WriteLine(child2.GetReflectedType());
Console.ReadLine();
}
... παρατήρησε οτι το πρώτο παιδί το δηλώνω με τον τύπο του, και το
δεύτερο με τον abstract τύπο. Αυτό για να δώ τη συμπεριφορά του
MethodInfo.GetCurrentMethod().ReflectedType , ανάλογα με τον τύπο που
έχει δηλωθεί η μεταβλητή. Αν δοκιμάσετε και τα δύο με τον abstract base
τύπο, το αποτέλεσμα είναι το ίδιο.
Output:
TestGeneric.AbstractBase
TestGeneric.AbstractBase
_
Μόλις το δοκίμασα και με static τη μέθοδο GetReflectedType(), και παλι το ίδιο αποτέλεσμα πήρα.
Με τρέλλανες αγαπητέ rousso απογευματιάτικα :D .. αλλά τα γουστάρω πολύ αυτά τα φιλοσοφικά ερωτήματα ! Πάντα τέτοια !!!
Angel
O:]