2009-11-09 28 views
1

採取以下屬性:你如何讓一個物業真正只讀?

public string Foo 
{ 
    get; 
    private set; 
} 

使用反射,我仍然可以設置該屬性的值從所屬的類之外。有沒有辦法來防止這種情況?移除set訪問器不是一個選項,因爲它必須是WCF友好的。

+1

你可以在你的setter中拋出異常嗎?我已經使用這個策略來阻止使用反射來重新實例化單例對象(用Java)。 – 2009-11-09 20:07:57

回答

5

喬恩斯基特says

你不能(據我所知)正在其中 調用者「完全信任」的情況下使用的停止思考。如果他們的運行時間不夠完全信任 那麼關於反射的一些事情(如果不是全部的話)會自動禁用 ,我相信 - 但是,如果這是爲了阻止其他人從 調用某些代碼,則無法阻止它們從運行您的代碼 完全信任,除非您在首位控制他們的盒子。

+1

[ReflectionPermission(SecurityAction.Deny,Flags = ReflectionPermissionFlag.AllFlags)]是我能想到的所有東西,但它可能並不真正幫助 – 2009-11-09 20:36:35

4

一個非常難看的解決方案是使用StackTrace類來驗證只有你自己的類的方法調用setter。

2

您可能會混淆代碼。這會讓人很難反思。

相關問題