Informazioni a livello di origine (attributi Caller)
Usate CallerMemberName, CallerFilePath e CallerLineNumber per acquisire informazioni sul punto di chiamata nei log, nei controlli di guardia e nelle notifiche delle proprietà.
Informazioni a livello di origine (attributi Caller) è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Perché usare le informazioni sul chiamante
Obiettivo: acquisire automaticamente le informazioni sul punto della chiamata.
- CallerMemberName — chi ha effettuato la chiamata
- CallerFilePath — quale file
- CallerLineNumber — quale riga
- Utile per log, controlli e notifiche
Nome del membro nei log
CallerMemberName inserisce automaticamente il nome del metodo o della proprietà del chiamante quando l'argomento viene omesso.
using System;
using System.Runtime.CompilerServices;
public static class Log
{
// Caller fills "member" automatically if not provided
public static void Info(string msg, [CallerMemberName] string member = null)
{
Console.WriteLine("[" + (member ?? "?") + "] " + msg);
}
}
public class Program
{
static void DoWork() { Log.Info("started"); }
public static void Main(string[] args)
{
Log.Info("app boot");
DoWork(); // prints caller method name
}
}
Informazioni su file e riga
Aggiunga CallerFilePath e CallerLineNumber per diagnosticare con precisione l'origine dei problemi.
using System;
using System.Runtime.CompilerServices;
public static class Diag
{
public static void Trace(string msg,
[CallerFilePath] string file = null,
[CallerLineNumber] int line = 0,
[CallerMemberName] string member = null)
{
Console.WriteLine(file + ":" + line + " in " + member + " -> " + msg);
}
}
public class Program
{
static void Step() { Diag.Trace("stepping"); }
public static void Main(string[] args)
{
Diag.Trace("start");
Step();
}
}
Notifiche delle proprietà
Usi CallerMemberName nei setter o negli helper degli eventi per evitare stringhe codificate direttamente nel codice.
using System;
using System.Runtime.CompilerServices;
public class Person
{
private string _name;
// Notify helper uses CallerMemberName so callers need not pass the property name
void Notify([CallerMemberName] string property = null)
{
Console.WriteLine("Changed: " + property);
}
public string Name
{
get { return _name; }
set { _name = value; Notify(); } // property name auto-filled
}
}
public class Program
{
public static void Main(string[] args)
{
Person p = new Person();
p.Name = "Ada"; // prints "Changed: Name"
}
}
Controlli con il nome del chiamante
Le informazioni sul chiamante rendono più chiari i messaggi dei controlli senza dover inserire manualmente le stringhe.
using System;
using System.Runtime.CompilerServices;
public static class Guard
{
public static void NotNull(object x, [CallerMemberName] string caller = null)
{
if (x == null) throw new ArgumentNullException("value", "Null passed by " + (caller ?? "?"));
}
}
public class Program
{
static void Save(string path)
{
Guard.NotNull(path); // if null, message includes "Save"
Console.WriteLine("Saving to " + path);
}
public static void Main(string[] args)
{
try
{
Save(null);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Suggerimenti e note
Note:
- Gli attributi del chiamante funzionano con i parametri facoltativi che hanno valori predefiniti.
- Non faccia affidamento sui percorsi esatti dei file per i segreti: i percorsi possono rivelare le cartelle.
- Sono molto utili per logging, diagnostica ed eventi di modifica delle proprietà.
Attributo del nome del chiamante
Riepilogo
Riepilogo: aggiunga CallerMemberName, CallerFilePath e CallerLineNumber ai parametri facoltativi per acquisire gratuitamente il contesto del chiamante.
Domande Frequenti
La lezione «Informazioni a livello di origine (attributi Caller)» è gratuita?
Sì — il testo completo di «Informazioni a livello di origine (attributi Caller)» è 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 «Informazioni a livello di origine (attributi Caller)»?
Usate CallerMemberName, CallerFilePath e CallerLineNumber per acquisire informazioni sul punto di chiamata nei log, nei controlli di guardia e nelle notifiche delle proprietà. 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 2 di 3.
Quanto tempo richiede la lezione «Informazioni a livello di origine (attributi Caller)»?
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