0

我有一些属性用于访问父类中的字段,如下所示:

A类:

private int _number = 42;
public virtual int Number { get { return _number; } }

B 类:A:

public override int Number { get { return base.Number + 1; } }

我的问题是,如果我访问B.Number,它是否仍会解析为直接访问A._number(+1)?

当然,这是假设一个优化的发布版本。

更重要的是,访问修饰符是抽象的(因为它们仅在编译时很重要,并且在运行时对代码没有影响),还是它们实际上会在运行时限制访问(当然,使用反射时除外)?

4

1 回答 1

0

好吧,它们是抽象的,因为它们不会影响运行时性能,但是对于启用安全管理器的情况,信息仍然需要存储在编译的 IL 中。

不,这里对 getter 函数的调用没有在 x64 和 x86 中内联。

public static void Main(string[] args) {    
     B b = new B();
     int a = b.Number;
}

您可以使用这些说明来反汇编 jit 代码并亲自查看。

于 2013-08-07T11:19:12.587 回答