gpt4 book ai didi

c# - CallerMemberNameAttribute是否使用反射

转载 作者:太空狗 更新时间:2023-10-29 18:09:26 25 4
gpt4 key购买 nike

您可以使用 CallerMemberName属性以避免在实现 INotifyPropertyChanged 接口(interface)时将成员名称指定为被调用方法的字符串参数。

问题是它在幕后使用了反射吗?硬编码属性名称是否会影响性能?

最佳答案

没有;编译器在编译期间直接对成员名称进行硬编码。就 IL 而言,这是 ldstr。例如,如果我们编译:

static void Implicit()
{
Log();
}
static void Explicit()
{
Log("Explicit");
}
static void Log([CallerMemberNameAttribute] string name = null)
{}

我们得到:

.method private hidebysig static void Implicit() cil managed
{
.maxstack 8
L_0000: ldstr "Implicit"
L_0005: call void Program::Log(string)
L_000a: ret
}
.method private hidebysig static void Explicit() cil managed
{
.maxstack 8
L_0000: ldstr "Explicit"
L_0005: call void Program::Log(string)
L_000a: ret
}

如您所见 - IL 直接将名称烘焙完全,就像我们手动输入字符串一样。

关于c# - CallerMemberNameAttribute是否使用反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16053079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com