0Pricing
C# Academy · Lezione

Type, MethodInfo, attivazione, attributi personalizzati

Ottenete oggetti Type, individuate MethodInfo, invocate metodi, create istanze con Activator e definite o leggete attributi personalizzati.

Type, MethodInfo, attivazione, attributi personalizzati è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Panoramica

Obiettivo: utilizzare la reflection in modo sicuro.

  • Ottenere Type
  • Trovare MethodInfo
  • Creare istanze tramite Activator
  • Definire e leggere gli attributi

Ottenere Type

Ottenga Type tramite typeof, da un'istanza con GetType() oppure per nome tramite Type.GetType.

using System;

public class Sample { }

public class Program
{
  public static void Main(string[] args)
  {
    // 1) From a compile-time type
    Type t1 = typeof(Sample);

    // 2) From an instance
    Sample s = new Sample();
    Type t2 = s.GetType();

    // 3) From a full name (needs assembly-qualified name for external types)
    Type t3 = Type.GetType("System.String");

    Console.WriteLine(t1.Name + ", " + t2.FullName + ", " + (t3 == null ? "null" : t3.Name));
  }
}

MethodInfo.Invoke

Utilizzi GetMethod per individuare un metodo e Invoke per chiamarlo. Passi l'istanza e l'array degli argomenti.

using System;
using System.Reflection;

public class Greeter
{
  public string Hello(string name) { return "Hello, " + name; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Greeter g = new Greeter();
    Type t = typeof(Greeter);

    MethodInfo mi = t.GetMethod("Hello"); // public instance method
    object result = mi.Invoke(g, new object[] { "Ada" }); // call dynamically

    Console.WriteLine(result); // Hello, Ada
  }
}

Nozioni di base su Activator

Activator.CreateInstance(Type) costruisce un oggetto usando il costruttore pubblico senza parametri.

using System;

public class Person
{
  public string Name { get; set; }
  public Person() { Name = "Unknown"; } // parameterless ctor
}

public class Program
{
  public static void Main(string[] args)
  {
    Type tp = typeof(Person);
    object o = Activator.CreateInstance(tp); // uses public parameterless ctor
    Person p = (Person)o;
    p.Name = "Alan";
    Console.WriteLine("Created: " + p.Name);
  }
}

Attributi personalizzati

Crei una piccola classe Attribute e la recuperi tramite GetCustomAttributes sul tipo o sul metodo.

using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LabelAttribute : Attribute
{
  public string Text { get; private set; }
  public LabelAttribute(string text) { Text = text; }
}

[Label("Utility class")]
public class Utils
{
  [Label("Adds two ints")]
  public static int Add(int a, int b) { return a + b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Utils);

    // Read class attribute
    object[] classAttrs = t.GetCustomAttributes(typeof(LabelAttribute), false);
    if (classAttrs.Length > 0)
      Console.WriteLine("Class label: " + ((LabelAttribute)classAttrs[0]).Text);

    // Read method attribute
    MethodInfo mi = t.GetMethod("Add");
    object[] methodAttrs = mi.GetCustomAttributes(typeof(LabelAttribute), false);
    if (methodAttrs.Length > 0)
      Console.WriteLine("Method label: " + ((LabelAttribute)methodAttrs[0]).Text);
  }
}

Suggerimenti e sicurezza

Suggerimenti:

  • Verifichi la presenza di null restituito da Type.GetType e di membri mancanti.
  • Preferisca typeof quando possibile (è più veloce e sicuro).
  • Mantenga l'uso della reflection centralizzato e ben documentato.
  • Usi BindingFlags per cercare membri non pubblici o statici.

Nozioni di base sull'attivazione

Verifica rapida: quale API crea un'istanza da un Type che dispone di un costruttore pubblico senza parametri?

Riepilogo

Riepilogo: recuperi un Type, trovi un MethodInfo, crei l'istanza con Activator e legga gli attributi usando GetCustomAttributes.

Domande Frequenti

La lezione «Type, MethodInfo, attivazione, attributi personalizzati» è gratuita?

Sì — il testo completo di «Type, MethodInfo, attivazione, attributi personalizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «Type, MethodInfo, attivazione, attributi personalizzati»?

Ottenete oggetti Type, individuate MethodInfo, invocate metodi, create istanze con Activator e definite o leggete attributi personalizzati. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «Type, MethodInfo, attivazione, attributi personalizzati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Type, MethodInfo, attivazione, attributi personalizzati
  2. Informazioni a livello di origine (attributi Caller)
  3. Scenari di metaprogrammazione leggera
← Torna a C# Academy