c# - remove - htmlagilitypack




Perché i unsigned int non sono compatibili con CLS? (3)

Gli int non firmati non ti guadagnano molto nella vita reale, tuttavia avere più di un tipo di int ti fa soffrire, quindi molte lingue hanno solo intuito.

CLS compliant ha lo scopo di consentire a una classe di essere utilizzata da molte lingue ...

Ricorda che nessuno ti rende compatibile con CLS.

È ancora possibile utilizzare unsigned uns in un metodo o come para a un metodo privato , in quanto è solo l'API pubblica che CLS compatibile limita.

Perché gli interi non firmati non sono compatibili con CLS?

Sto iniziando a pensare che le specifiche del tipo siano solo per le prestazioni e non per la correttezza.


Gli interi non firmati non sono compatibili con CLS perché non sono interoperabili tra alcune lingue.


Una parte del problema, sospetto, ruota attorno al fatto che i tipi interi senza segno in C sono tenuti a comportarsi come membri di un anello algebrico astratto anziché come numeri [che significa, ad esempio, che se una variabile intera a 16 bit senza segno è uguale a zero , decrementando è richiesto di produrre 65.535, e se è uguale a 65.535 allora è necessario incrementare lo zero per farlo.] Ci sono momenti in cui tale comportamento è estremamente utile, ma i tipi numerici mostrano che un simile comportamento potrebbe essere andato contro lo spirito di alcune lingue . Direi che la decisione di omettere i tipi senza segno è probabilmente precedente alla decisione di supportare sia contesti numerici controllati che non selezionati. Personalmente, vorrei che esistessero tipi interi separati per numeri senza segno e anelli algebrici; l'applicazione di un operatore unario negativo a un numero di 32 bit senza segno dovrebbe produrre un risultato con segno a 64 bit [la negazione di qualsiasi valore diverso da zero produrrebbe un numero negativo] ma applicare un segno meno unario a un tipo di anello dovrebbe produrre l'inverso additivo all'interno dell'anello.

In ogni caso, il motivo per cui gli interi non firmati non sono compatibili con CLS è che Microsoft ha deciso che le lingue non dovevano supportare gli interi senza segno per poter essere considerati "compatibili con CLS".





cls-compliant