Domanda

Scusami per quella che è probabilmente una domanda sciocca ma mi sta infastidendo ...

int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();

char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
È stato utile?

Soluzione

Grazie a Pedro d'Aquino per aver identificato queste altre domande che forniscono risposte.

Il punto di base è che i metodi di istanza sulle strutture non sono thread-safe ma i metodi statici lo sono.

Vedi queste domande:

Altri suggerimenti

Questi sono metodi utility che non devono appartenere a queste classi. Ciò rafforza il Principio di responsabilità unica

(modifica) Ero confuso con Java

( Informazioni sui membri statici ):

  

È possibile utilizzare i membri di classe statici   dati e comportamenti separati   indipendente da qualsiasi identità di oggetto:   i dati e le funzioni non cambiano   indipendentemente da ciò che accade al   oggetto. Le classi statiche possono essere utilizzate   quando non ci sono dati o comportamenti in   la classe che dipende dall'oggetto   identità.

Il punto di vista thread-safe è anche una buona ragione.

Puoi farlo da solo se usi .NET 3.0, usando i metodi di estensione:

public static class Extensions
{
public static bool IsLetter(this chr)
{
 return char.IsLetter(chr);
}
}

quindi chiamalo come: c.IsLetter ()

O fai come vuoi tu. Lo stesso all'ordinamento

È una decisione di implementazione. Non so cosa stesse succedendo nelle teste del progettista del framework, ma credo che uno dei motivi sia quello di consentire di ordinare la matrice di tipi personalizzati con il minimo sforzo.

Qualsiasi classe che implementa iComparable può essere inserita in un array e ordinata. Se fosse un metodo dell'array, allora dovrei scrivere un nuovo tipo di array per il mio tipo personalizzato.

Inoltre, come altri hanno notato, i tipi primitivi richiedono questo design di un array.

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