部分的には不思議なものから見て、部分的には潜在的な問題から保護しています。以下の呼び出しによって起こることができる最悪のあるものを想像して(または類似した何かを、しかしstring.Empty
は良い例です):x = myClass.bar ?? string.Empty
を行うコードのどこかがあるときString.Emptyの値を変更しないようにする
typeof(String).GetField("Empty",
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.GetField
).SetValue(null, "foo");
これが問題を引き起こします。
String.Empty
やSqlDateTime.MinValue
(または.NETの他の同様の読み取り専用フィールド)のような値を変更しているユーザーに対して保護する(または検出する)方法はありますか。
関連する? http://stackoverflow.com/questions/4447939/is-it-possible-to-disable-reflection-from-a-net-assembly – harold
信頼できるコードが悪いことをするのを防ぐことはできません。また、信頼できないコードでは 'string.Empty'を変更できません。そして、この場合、足に自分自身を撮影することはかなり明白です。 – CodesInChaos
ところで、Int.MaxValueはa * constant *フィールドではありませんか? – harold