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
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
- Type, MethodInfo, attivazione, attributi personalizzati
- Informazioni a livello di origine (attributi Caller)
- Scenari di metaprogrammazione leggera