ABC*_*BCD 8 .net c# reflection mvvm inotifypropertychanged
在实现INotifyPropertyChanged接口时,可以使用CallerMemberName属性来避免将成员名称指定为被调用方法的String参数.
问题是它是否使用场景背后的反射?硬编码属性名称是否有任何性能损失?
Mar*_*ell 18
没有; 编译器在编译期间直接硬编码成员名.就IL而言,这是ldstr.例如,如果我们编译:
static void Implicit()
{
Log();
}
static void Explicit()
{
Log("Explicit");
}
static void Log([CallerMemberNameAttribute] string name = null)
{}
Run Code Online (Sandbox Code Playgroud)
我们得到:
.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
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的 - IL的名称直接与我们手动放置字符串完全相同.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |