[ad_1]
我们如何访问非公开成员?
我有一个名为“doseSuggestiions”的对象,其中有一个名为“频率”的非公共成员
我想访问相同的。
请帮助我
解决方案1
基本上,C# 中有 4 个访问修饰符。 公共、受保护、内部和私有。 以下是每个修饰符的定义:
1. 的 民众 [^] 关键字是类型和类型成员的访问修饰符。 公共访问是最宽松的访问级别。 访问公共成员没有任何限制。
2. 的 受保护的[^] 关键字是成员访问修饰符。 受保护的成员可以从声明它的类中访问,也可以从声明该成员的类的派生类中访问。
3. 的 内部的[^] 关键字是类型和类型成员的访问修饰符。 内部成员只能在同一程序集中的文件内访问。 内部访问的常见用途是基于组件的开发,因为它使一组组件能够以私有方式进行协作,而无需暴露给应用程序代码的其余部分。 例如,用于构建图形用户界面的框架可以提供使用具有内部访问权限的成员进行协作的 Control 和 Form 类。 由于这些成员是内部成员,因此他们不会接触到使用该框架的代码。
4. 的 私人的[^] 关键字是成员访问修饰符。 私有访问是最不许可的访问级别。 私有成员只能在类或声明它们的结构体内访问
简而言之,根据非公共变量,您的成员有不同的可访问级别。
解决方案3
访问非公开成员只有一种方法:反思。 问题是这种方法的支持性较差。 例如,您可以通过名称查找成员,但如果您输错了字符串或名称稍后更改,编译时检查将不会警告您 – 您将找不到该成员。 您可以将所有成员集中作为多态成员数组查找,也可以单独查找所有字段、所有属性、所有事件、所有方法、所有构造函数或实现的接口。 您可以限制公共或非公共成员的搜索。
使用以下方法 System.Type
: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.
看 http://msdn.microsoft.com/en-us/library/system.type.aspx[^]。
要查找非公共方法,您需要使用“Get...
” 方法使用 System.Reflection.BindingFlags
范围; 使用 System.Reflection.BindingFlags.NonPublic
或者 System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public
解决方案2
创建一个您将能够访问的公共财产。
解决方案39
简单的答案是访问私有成员的需要是 错误,设计缺陷。
用于允许对类的内部方法/状态进行不同级别的访问的一种策略是处理操作系统级别(组、权限、用户)的安全问题。
考虑一下互联网登录如何保留用户和管理员修改代码的权限; 有关如何访问具有不同级别的读/写权限的安全数据库。
另一种策略是在类的构造函数中传递某种类型的安全代码:这始终是一个安全风险。
如果代码不是你写的,你不能修改它等等,你就是 黑客攻击 代码……这是一个非常不受欢迎的任务。
[ad_2]
コメント