次のコードを考えてみましょう。CA2104: Do not declare read only mutable reference types.
public class Test
{
// This provokes CA2104: "Do not declare read only mutable reference types".
protected readonly ImmutableClass ImmutableMember;
}
public class ImmutableClass
{
}
警告CA2104を抑制する方法でクラスを不変としてマークする方法を知っている人はいますか?
私は成功する見込みのない装飾を試みました (その属性はフォーム エディターが使用するためにかなり明確であるためMutableClass
) 。[ImmutableObject(true)]
コード分析では、CA2104 を発行するかどうかを判断する際に、既知の不変型のリストを使用していると思われるため、同じアプローチを使用することはできません。
クラスを不変としてマークできたとしても、コンパイラがそれが真かどうかを実際にチェックする方法はないと思いますが、少なくとも有用な指標になる可能性があります。
とにかく、私が見落としている属性はありますか? そうでない場合は、抑圧する必要があります。
現時点では、これを行う別の方法はないようです。
この種のことについて、Joe Duffy (「Concurrent Programming On Windows」の著者) の興味深いブログを見つけました。
彼は「ImmutableAttribute があると想像してください」という言葉から始めます。... :)
これは非常に興味深いことです。彼は、不変であると見なされる型の分析を行うために、いくつかの新しい FxCop ルールを作成するのに苦労しました。