Tam*_*ege 22
成员辅助功能不是安全功能.它是为了保护程序员免受他或她自己的伤害.它有助于实现封装,但它绝不是安全功能.
反思是冗长乏味的,因此人们通常不会自愿使用它来访问非公共成员.它也很慢.反射通常仅用于特殊情况.然而,没有什么可以完全保护人类的愚蠢,如果有人想滥用反思,他可以很容易地做到,但即使没有反射API,他们也可以实现同样的事情(如果他们完全信任,那就是)如果他们足够坚定了.
Mar*_*ell 19
这对于远程处理,序列化,物化等场景是必要的.您不应盲目使用它,但请注意,这些设施始终可用于任何系统(实际上,通过直接寻址内存).反思简单地将其形式化,并将控制和检查放在路上 - 您没有看到它,因为您可能正在以"完全信任"运行,因此您已经比受保护的系统更强大.
如果您在部分信任中尝试此操作,您将看到对内部状态的更多控制.
这是反模式吗?
仅当您的代码使用不当时.例如,请考虑以下内容(对WCF数据协定有效):
[DataMember]
private int foo;
public int Foo { get {return foo;} set {foo = value;} }
Run Code Online (Sandbox Code Playgroud)
WCF支持这个是不正确的吗?我怀疑没有...有多种情况下你想要序列化不属于公共API的东西,而没有单独的DTO.同样,如果您选择,LINQ-to-SQL将实现为私有成员.
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |