gpt4 book ai didi

c# - 区分属性 protected 和 setter protected

转载 作者:行者123 更新时间:2023-11-30 16:00:00 30 4
gpt4 key购买 nike

有没有办法确定以下的二传手能见度差异:

public Prop { get; protected set; }
protected Prop { get; set; }

使用反射?还是那些与 C# 反射等效?

最佳答案

不,这两个 setter 是相同的。

验证这一点的 final方法是查看为两个变体生成的 IL。我用以下两个属性编译了一个小测试:

  public    int Prop  { get; protected set; }
protected int Prop2 { get; set; }

然后我拆解了它。这两个属性的 setter 的 IL 是相同的,除了它们的名称不同(Prop vs Prop2):

.method family hidebysig specialname instance void 
set_Prop(int32 'value') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: stfld int32 ConsoleApplication1.Program::'<Prop>k__BackingField'
IL_0007: ret
} // end of method Program::set_Prop
.method family hidebysig specialname instance void 
set_Prop2(int32 'value') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: stfld int32 ConsoleApplication1.Program::'<Prop2>k__BackingField'
IL_0007: ret
} // end of method Program::set_Prop2

如果该方法是公开的,它将在顶部用public 注释,在method attributes 的列表中。在 .method 之后。同样,如果它是 private。在这种情况下,两者都只是protected,用family表示。

我想说这与预期一致:两个 setter 具有相同的可见性,因此它们在编译器和运行时环境中应该看起来相同。

关于c# - 区分属性 protected 和 setter protected ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820785/

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