System.Reflection.BindingFlags.Instance 对应 C# 的访问修饰符

7

System.Reflection.BindingFlags 中的 Public、NonPublic 和 Instance 分别对应 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

有没有办法让这个更加通俗易懂?例如,如果Instance对应于Internal,为什么它不直接被称为Internal?
1个回答

16

您的表格并不完全正确。

实例指的是“实例方法”,也就是非静态方法。如果您希望获取非静态方法,则需要使用“Instance”筛选器。如果您想获取静态方法,则不能使用此筛选器。

NonPublic 意味着除了公共方法(public)之外的其他方法。因此,如果您使用 NonPublic 筛选器,则会获取私有、受保护、内部和受保护的内部方法。

Public 意味着只有公共方法,并且没有其他方法。

您的表格应该像这样:

+-------------+--------+---------+-----------+----------+--------------------+
| BindingFlag | Public | Private | Protected | Internal | Protected Internal |
+-------------+--------+---------+-----------+----------+--------------------+
| NonPublic   | No     | Yes     | Yes       | Yes      | Yes                |
| Public      | Yes    | No      | No        | No       | No                 |
+-------------+--------+---------+-----------+----------+--------------------+
在这张表格中加入“实例”过滤器没有意义,因为实例与方法的访问级别无关。

在这个表格中添加“实例”过滤器是没有意义的,因为实例与方法的访问级别无关。


2
实例(instance)有什么作用?在调用内部构造函数的上下文中似乎到处都被建议使用,例如:https://dev59.com/iG855IYBdhLWcg3w6Y5q#4077327 - JDiMatteo
2
你没有读我的答案,答案就在那里!Instance 意味着你将获得“非静态”成员,因此如果你使用这个过滤器,那么你不应该期望返回一个静态方法。我不能再清楚了。这里有来自 MSDN 的信息:http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags(v=vs.110).aspx - msporek
好的,谢谢,抱歉我的问题有点困惑。 - JDiMatteo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接