採取以下屬性:你如何讓一個物業真正只讀?
public string Foo
{
get;
private set;
}
使用反射,我仍然可以設置該屬性的值從所屬的類之外。有沒有辦法來防止這種情況?移除set訪問器不是一個選項,因爲它必須是WCF友好的。
採取以下屬性:你如何讓一個物業真正只讀?
public string Foo
{
get;
private set;
}
使用反射,我仍然可以設置該屬性的值從所屬的類之外。有沒有辦法來防止這種情況?移除set訪問器不是一個選項,因爲它必須是WCF友好的。
喬恩斯基特says:
你不能(據我所知)正在其中 調用者「完全信任」的情況下使用的停止思考。如果他們的運行時間不夠完全信任 那麼關於反射的一些事情(如果不是全部的話)會自動禁用 ,我相信 - 但是,如果這是爲了阻止其他人從 調用某些代碼,則無法阻止它們從運行您的代碼與 完全信任,除非您在首位控制他們的盒子。
[ReflectionPermission(SecurityAction.Deny,Flags = ReflectionPermissionFlag.AllFlags)]是我能想到的所有東西,但它可能並不真正幫助 – 2009-11-09 20:36:35
一個非常難看的解決方案是使用StackTrace類來驗證只有你自己的類的方法調用setter。
您可能會混淆代碼。這會讓人很難反思。
你可以在你的setter中拋出異常嗎?我已經使用這個策略來阻止使用反射來重新實例化單例對象(用Java)。 – 2009-11-09 20:07:57