Ricercare classi all'interno di un assembly utilizzando la Reflection

di Stefano Mostarda, in ASP.NET 2.0, 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à.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi