如何在System.Reflection.BindingFlags公开,非公开和实例对应于C#访问修饰符?
以下对应表是否正确?
+-------------+--------+---------+-----------+----------+--------------------+
| BindingFlag | Public | Private | Protected | Internal | Protected Internal |
+-------------+--------+---------+-----------+----------+--------------------+
| Instance | No | No | No | Yes | Yes |
| NonPublic | No | Yes | Yes | No | No |
| Public | Yes | No | No | No | No |
| * | Yes | Yes | Yes | Yes | Yes |
+-------------+--------+---------+-----------+----------+--------------------+
* Instance | NonPublic | Public
Run Code Online (Sandbox Code Playgroud)
有没有办法理解这个?例如,如果Instance对应于Internal,为什么它不仅仅称为Internal?
您的表格不是100%正确.
实例意味着这是一个"实例方法",这意味着非静态.如果要获取非静态方法,则使用"实例"过滤器.如果你想获得静态方法,那么你就不能把这个过滤器.
NonPublic表示除公共方法之外的任何内容.因此,如果您使用NonPublic过滤器,那么您将获得私有,受保护,内部和受保护的内部方法.
公共意味着公共方法,没有其他方法.
你的表应该是这样的:
+-------------+--------+---------+-----------+----------+--------------------+
| BindingFlag | Public | Private | Protected | Internal | Protected Internal |
+-------------+--------+---------+-----------+----------+--------------------+
| NonPublic | No | Yes | Yes | Yes | Yes |
| Public | Yes | No | No | No | No |
+-------------+--------+---------+-----------+----------+--------------------+
Run Code Online (Sandbox Code Playgroud)
将"Instance"过滤器放在此表中是没有意义的,因为Instance不处理方法的访问级别.