System.Reflection.BindingFlags.Instance与C#访问修改器的对应关系

JDi*_*teo 3 .net c#

如何在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?

msp*_*rek 7

您的表格不是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不处理方法的访问级别.

  • 实例有什么作用?在调用内部构造函数的上下文中似乎到处都建议这样做,例如http://stackoverflow.com/a/4077327/1007353 (2认同)
  • 你没看我的答案,答案就在那里!实例意味着您将获得“非静态”成员,因此如果您使用此过滤器,则不应期望返回静态方法。我再清楚不过了。这里你有来自 MSDN 的信息:http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags(v=vs.110).aspx (2认同)