1

重複の可能性:
.Net Frameworkが符号なしデータ型を使用しないのはなぜですか?

C#プログラミング言語(C#4.0をカバー)(第4版)、1.3タイプと変数、9ページ。

ジョンスキートは言います;

バイトが符号なし型であることに感謝します!Javaでバイトが署名されている(そして署名されていない同等のものがない)という事実は、多くのビットを無意味にいじくり回してエラーを起こしやすくします。私たち全員が私たちよりもはるかに多くのuintを使用する必要がある可能性は十分にあります。注意してください。多くの開発者は、整数型が必要な場合、デフォルトでintに到達すると確信しています。もちろん、フレームワークの設計者もこのカテゴリに分類されます。String.Lengthに署名する必要があるのはなぜですか。

String.Lengthを逆コンパイルすると;

/// <summary>
    /// Gets the number of characters in the current <see cref="T:System.String"/> object.
    /// </summary>
    /// 
    /// <returns>
    /// The number of characters in the current string.
    /// </returns>
    /// <filterpriority>1</filterpriority>
    [__DynamicallyInvokable]
    public int Length { [SecuritySafeCritical, __DynamicallyInvokable, MethodImpl(MethodImplOptions.InternalCall)] get; }

また、MSDNで;

Lengthプロパティは、Unicode文字の数ではなく、このインスタンスのCharオブジェクトの数を返します。その理由は、Unicode文字が複数の文字で表される可能性があるためです。

現在の文字列内の文字オブジェクトの数を返します。と呼ばれるタイプがすでに存在するのに、なぜString.Length戻るのですか?とのポイントは何ですか?Int32UInt32signed-unsigned byteString.Length

4

2 に答える 2

11

すべての.NETコアオブジェクトがCLSに準拠しているためです。また、CLSには符号なしデータ型はありません。

小切手

unsigned intがCLSに準拠していないのはなぜですか?

詳細については。

于 2013-01-03T21:02:31.827 に答える
10

Int32.NETFrameworkでは「汎用」整数と広く見なされています。分数ではない一般的な数値が必要な場合はInt32、最初に到達するものです。特別な理由がある場合にのみ、符号なしタイプの1つを使用します。

すべてのCountプロパティに使用intすると、一貫性のあるAPIが作成され、フラグ値として-1を使用できるようになります(フレームワークの一部のAPIで使用されます)。

http://blogs.msdn.com/b/brada/archive/2003/09/02/50285.aspxから:

私たちの多くの間の一般的な感覚は、プログラミングの大部分が署名された型で行われているということです。符号なしタイプに切り替えるときはいつでも、メンタルモデルの切り替え(および醜いキャスト)を強制します。最悪のキャストでは、符号なしの型をとるAPIの完全な並列世界を構築します。

于 2013-01-03T21:01:31.300 に答える