Si consideri il seguente codice, che provoca CA2104: Do not declare read only mutable reference types.
Avvertenza CA2104: esiste un modo per contrassegnare una classe come "Immutabile" per sopprimerla?
public class Test
{
// This provokes CA2104: "Do not declare read only mutable reference types".
protected readonly ImmutableClass ImmutableMember;
}
public class ImmutableClass
{
}
Qualcuno sa di un modo per marcare una classe come immutabile in un modo che avrebbe sopprimere CA2104 avvertimento?
Ho provato a decorare MutableClass
con [ImmutableObject(true)]
senza alcuna speranza di successo (poiché quell'attributo è piuttosto chiaro per l'Editor di form da utilizzare), e sicuramente non funziona.
Presumo che Code Analysis stia utilizzando un elenco di tipi immutabili noti per determinare se emettere CA2104, quindi non possiamo utilizzare lo stesso approccio.
Immagino che anche se si potesse contrassegnare una classe come immutabile, non ci sarebbe alcun modo per il compilatore per verificare effettivamente se fosse vero, ma almeno potrebbe essere un indicatore utile.
In ogni caso, ci sono degli attributi che sto trascurando? In caso contrario, la soppressione dovrà fare.
Sembra che non ci sia un modo alternativo per fare questo al momento.
Ho trovato an interesting blog from Joe Duffy (author of "Concurrent Programming On Windows") about this kind of thing.
Inizia con "Immagina di avere un ImmutableAttribute". ... :)
È piuttosto interessante: si è preso la briga di scrivere alcune nuove regole FxCop per eseguire un'analisi dei tipi attribuiti come immutabili.
Perché segnare come 'sola lettura '? –
@Davin Tryon: Perché la proprietà deve essere inizializzata nella costruzione e da allora in poi non è mai stata modificata, proprio come 'readonly' è sempre usata. Sicuramente la stessa ragione per cui avresti contrassegnato * qualsiasi cosa * di sola lettura? –
Pensato così, non hai menzionato. Sembra una soppressione unica per me. –