使用反射保护价值免受变化?

Ior*_*nev 4 c# reflection

这是我写一个小第三方库的问题.在这个图书馆里,我有一个这样的课程

public class TestClass
    {
        public int TestField { get; private set; }

        public TestClass( )
        {
            TestField = 1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我有这样的类的varialbe形式

 public TestClass test = new TestClass( );
Run Code Online (Sandbox Code Playgroud)

我面临的问题是像这样的usnig反射

PropertyInfo field = typeof( TestClass ).GetProperty( "TestField" );
            field.SetValue( test, 2, null );
Run Code Online (Sandbox Code Playgroud)

程序员可以改变这个类的内部价值.这将是非常糟糕的事情因为它可以崩溃孔库.我的问题是什么是保护我的代码形式这种变化的最佳方法.我知道我可以使用某种bool标志,因此只能改变一个值,但这不是很好的salution有更好的一个吗?
最诚挚的问候,
Iordan

Sky*_*ers 6

请理解我的意思是尊重这一点:

你是在浪费时间.认真.

在指定API或合同时不考虑反思.

相信这一点.不可能停止反射.如果消费者一心想偷看你的代码并翻转因某种原因而被隐藏的内容,那么后果就在于他们,而不是你.


Mar*_*ell 6

您试图保护您的系统免受比您的代码更强大的事情.如果您不信任某些代码,请使用部分信任运行它 - 然后当它要求反映您的类型时,它将被拒绝.

反射(以及类似的相关技术DynamicMethod)可以通过足够的信任实现对数据的几乎不受限制的访问(例如,更改a的字符string无需重新分配它); 因此,您必须减少对不受信任的代码的信任.

以类似的方式,对您的进程(或其加载的dll)具有调试器或管理员访问权限的任何人都可以破坏您的代码.这不是一个有趣的攻击,因为"黑客"必须已经拥有至少与你的代码一样多的访问权限(可能更多).