例如,我想记录每次Name
值变化时的日志。
using System;
class Data {
public string Name;
public Data(string name) {
Name = name;
}
}
public class Test
{
public static void Main()
{
Data data = new("foo");
object name = typeof(Data).GetField("Name").GetValue(data);
Console.WriteLine(name);
}
}
您不能对字段这样做,但是您可以将其转换为属性,然后添加代码来跟踪该过程。我们可以添加一个事件以方便跟踪:
class Data {
private string m_Name;
public string Name {
get => m_Name;
set {
// If we don't want to trigger event on each Name assignment
// but on actual chnages only
if (string.Equals(m_Name, value))
return;
// Before Changing
//TODO: fire event here if you want to track Name just befor changing
m_Name = value;
// After Changing
NameChanged?.Invoke(this, EventArgs.Empty);
}
}
public Data(string name) {
Name = name;
}
// Event thar will be fired on each Name change
public event EventHandler NameChanged;
}
用法:
Data myData = new Data("");
// We register event handler
myData.NameChanged += (o, e) => {
Console.WriteLine($"Name changed into {((Data) o).Name}");
};
// And change the Name which will fire the event
myData.Name = "Some Other Name";