我正在阅读反射的安全考虑,看到了以下内容:
类库:
我本来期望会看到一个异常,但实际上在控制台中看到的是
因此,我编写了一个测试程序:即使代码完全受信任,透明代码也不能使用反射访问安全关键成员。会抛出 MethodAccessException、FieldAccessException 或 TypeAccessException。
类库:
namespace ClassLibrary
{
public class Foo
{
[SecurityCritical] private int X;
}
}
测试程序:
using ClassLibrary;
namespace ReflectionSecurityTest
{
class Program
{
static void Main(string[] args)
{
Foo f = new Foo();
var flags = BindingFlags.Instance | BindingFlags.NonPublic;
var field = f.GetType().GetField("X", flags);
field.SetValue(f,15);
Console.WriteLine(field.GetValue(f));
}
}
}
我本来期望会看到一个异常,但实际上在控制台中看到的是
15
。问题是为什么?我是否误解了SecurityCritical
的作用,还是做错了什么?