ho cercato di avvolgere la mia testa intorno a questa violazione FxCop "DoNotDeclareReadOnlyMutableReferenceTypes"immutabili tipi di riferimento di sola lettura e FxCop violazione: non dichiarano di leggere i tipi di riferimento solo mutabili
MSDN: http://msdn.microsoft.com/en-us/library/ms182302%28VS.80%29.aspx
codice da MSDN, che avrebbe causare questa violazione:
namespace SecurityLibrary
{
public class MutableReferenceTypes
{
static protected readonly StringBuilder SomeStringBuilder;
static MutableReferenceTypes()
{
SomeStringBuilder = new StringBuilder();
}
}
}
Dalla risposta di Jon here e here, ho capito che il campo tenendo il riferimento all'oggetto (in questo caso SomeStringBuilder) è di sola lettura e non l'oggetto stesso (che viene creato da new StringBuilder()
)
Quindi, prendendo questo esempio, come dovrei cambiare l'oggetto stesso, una volta che il campo ha un riferimento ad esso? Mi piace il Eric Lippert's example di come l'array di sola lettura può essere modificato e vorrei vedere qualcosa di simile per qualsiasi altro tipo di riferimento mutabile
bello. Fantastico. Perfezionare. – ram
Solo un piccolo errore: il campo è ** protetto **, non privato, quindi è * assolutamente * mutabile dall'esterno. Immagino che * questo * sia ciò a cui FXCop si oppone. –
@Konrad Rudolph: buona cattura! Ho appena visto la prima parola chiave e ho notato che non si trattava di un modificatore di accesso, e quindi deve essere impostato come predefinito (sic). Non ho notato che le parole chiave erano state cambiate. –