为何Test类的SolveAsync方法可访问Program类的私有方法与属性?
问题解答
Test类并没有直接访问Program类的私有成员,本质是代码的作用域和委托执行逻辑的区别:
lambda表达式的定义位置决定了它的访问权限
在Program类的Main方法里,你定义的getter是一个lambda表达式:async () => await Get();。这个lambda是在Program类内部创建的,根据C#的私有访问规则,同一类内部的代码可以自由访问自身的私有成员,所以它能调用私有方法Get,也能读取私有静态属性y。Test类只是触发委托执行,而非直接访问私有成员
Test类的SolveAsync方法只是接收了这个委托参数,然后调用它。真正执行Get方法和访问y的是那个lambda表达式,而lambda的执行上下文依然属于Program类的作用域,Test类全程没有直接去碰Program的私有成员。
总结:权限看的是代码定义在哪里,不是在哪里被调用。lambda在Program里定义,所以有访问私有成员的权限,Test只是帮着触发它执行罢了。
内容的提问来源于stack exchange,提问作者Pulkit Sharma
相关产品推荐
相关产品推荐

