Domanda

Ho una classe statica pubblica in cui vorrei avere un metodo ToString ().

L'ho definita come stringa statica pubblica ToString (), ma viene visualizzato il seguente avviso:

  

'Class.ToString ()' nasconde il membro ereditato 'object.ToString ()'. Per fare in modo che il membro corrente sovrascriva tale implementazione, aggiungi la parola chiave override. Altrimenti aggiungi la nuova parola chiave.

Se aggiungo la parola chiave override ottengo invece questo errore:

  

Un membro statico 'Class.ToString ()' non può essere contrassegnato come override, virtuale o astratto

Come posso liberarmi di quell'avvertimento e lasciare che la mia classe statica abbia il metodo ToString ().

Grazie,
Keith

È stato utile?

Soluzione

Sì, utilizzando il " nuovo " il modificatore silenzia efficacemente l'avviso del compilatore ma stai nascondendo esplicitamente un metodo di istanza con un metodo statico. (Questo è diverso dal sovrascrivere il metodo.) In genere non si desidera nascondere un metodo di istanza se non per ottime ragioni e non si dovrebbe davvero nasconderlo con un metodo statico poiché ciò cambia davvero la semantica comportamentale della chiamata. Ogni oggetto in .NET ha un metodo di istanza chiamato ToString () che ha un comportamento specifico che gli sviluppatori si aspettano; nascondendo quel comportamento con un nuovo metodo statico stai cambiando quell'aspettativa che può portare a molta confusione.

Cosa stai "quotando" " ;? Le classi statiche in genere non mantengono lo stato interno, quindi in realtà non dovrebbero esserci dati interni da fornire come output logico di una chiamata ToString (). Potresti voler ripensare il design della tua classe o fornire un nome di metodo diverso che indichi più chiaramente lo scopo del metodo senza nascondere l'istanza ToString ().

Altri suggerimenti

In una classe statica non è possibile sovrascrivere ToString. .ToString è un metodo di istanza e per definizione una classe statica può avere solo membri statici.

Inoltre, perché dovresti voler sostituire .ToString ()? Non è possibile ottenere un'istanza della classe e quindi non è possibile chiamare la funzione.

Nota: l'utilizzo della nuova sintassi non sovrascriverà .ToString. Creerà un nuovo membro completamente estraneo al metodo Object.ToString ().

Ok, quindi nel porre la domanda, ho trovato una risposta:

Il nuovo modificatore:

  

http://msdn.microsoft. com / it-it / library / 51y09td4 (VS.71) aspx # vclrfnew_newmodifier

ecco il metodo ora:

  

nuova stringa statica pubblica ToString ()

Grazie, Keith

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top