#911 - Ricercare classi all'interno di un assembly utilizzando la Reflection

La Reflection è una tecnica molto potente che permette di ispezionare il contenuto di un assembly.

Uno degli utilizzi più comuni è quelo di scorrere tutte le classi alla ricerca di quelle che rispecchino determinate caratteristiche (nome, classe base, namespace di appartenenza, ecc).

Una volta ottenuto l'assembly desiderato tramite il metodo Load della classe System.Reflection.Assembly, basta ricorrere al metodo GetTypes della classe stessa per ottenere tutte le classi.

Nell'esempio riportato, vengono mostrate in una griglia tutte le classi presenti nell'assembly System.Web e che derivano dal tipo WebControl. E' importante notare che il controllo sull'ereditarietà viene fatto attraverso il metodo IsSubclassOf dell'oggetto Type che descrive la classe che si sta analizzando.

<%@ Page Language="C#" %>
<%@ Import namespace="System.Collections.Generic"%>
<%@ Import namespace="System.Reflection"%>
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    Type t = typeof(WebControl);
    List<Type> result = new List<Type>();
    foreach (Type type in Assembly.Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A").GetTypes())
    {
      if (type.IsSubclassOf(t))
        result.Add(type);
    }
    grd.DataSource = result;
    grd.DataBind();
  }
</script>
<form id="form1" runat="server">
  <div>
    <asp:gridview ID="grd" runat="server" AutoGenerateColumns="false">
      <Columns>
        <asp:BoundField DataField="Name" />
      </Columns>
    </asp:gridview>
  </div>
</form>

Questa tecnica può ritornare utile quando si sviluppano sistemi a plugin, per consentire attraverso un wizard, ad esempio, quale sia la classe da utilizzare per una certa funzionalità.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC