4

コーディング標準の「ルール」の1つは次のとおりです。

  • 共通型システムを使用します。たとえば、Int32の代わりに使用しintます。

他のガイドラインは大まかにMicrosoftの設計ガイドラインダイジェストに基づいていますが、私はこれまで同様のルールを見たことがありません。共通型システムもそうではないようです。

デフォルトのVisualStudioとReSharperのリファクタリングを書き直して、、に、などに変換する必要があるため、不便だと思います。また、おそらくstringその不便さの結果として、かなり一貫性のない方法で適用され、StyleCopルールがありません。適用されていることを確認するために存在します。StringfloatSinglelongInt64objectObject

したがって、なぜこのルールが設定されたのか疑問に思います。正当な理由がありますか?たとえば、Int32代わりに使用しなければならないケース(おそらく歴史的)はありますか?int

更新

推奨されるフレームワーク設計ガイドライン(2006、Cwalina&Adams)のセクション3.2.3言語固有の名前の回避を読み、「識別子でこれらの言語固有の型名を使用しないことが重要である」と述べています(私の強調)。同意しました。

しかし、ジェフリー・リッチターはさらにコメントします。「私はこれをさらに一歩進めて、言語のエイリアス名を決して使用しません。それは何の価値ももたらさず、大きな混乱を招きます」。おそらくこれがこのルールの由来なのだろうか?

4

4 に答える 4

3

このルールは、フレームワークガイドラインの誤解によるものだと思います。

ガイドラインは、一般的な命名規則のセクションで次のように述べています。

識別子がその型を超えて意味的な意味を持たないまれなケースでは、言語固有の名前ではなく、一般的な共通言語ランタイム(CLR)の型名を使用してください。

たとえば、データをに変換するメソッドには、の言語固有の型名ではなく、Int16という名前を付ける必要があります。ToInt16ToShortShortInt16

名前の一部としてタイプを含む識別子(メソッドのセットなど)を作成する場合は、C#エイリアスではなく、SomeType ReadSomeType()実際のタイプ名を使用する必要があります。SomeType

異なる言語で作業するプログラマーは、異なる意味をタイプに関連付ける場合があります。たとえば、ReadFloat()メソッドがある場合、C#プログラマーはそれがを返すと想定しSystem.Single、F#プログラマーはそれがを返すと想定しますSystem.DoubleReadSingleしたがって、またはに名前を付ける必要がありますReadDouble

このルールは、コード内の型を参照するために使用する単純な型名には適用されません。あなたのライブラリを消費するプログラマーは、あなたがどちらを使用したかを知ることは決してありません。

于 2012-06-29T11:12:43.177 に答える
2

公開されている名前を参照して、クラスライブラリ開発者向けの推奨事項があります。

識別子がその型を超えて意味的な意味を持たないまれなケースでは、言語固有の名前ではなく、一般的な共通言語ランタイム(CLR)の型名を使用してください。

ただし、私が知る限り、内部変数などに関しては、これが推奨されることはありませんでした。

于 2012-06-29T10:57:42.537 に答える
0

これには何の理由も考えられませんが、フレームワークのバージョン3.5以降しか使用しておらず、私が気付いていない歴史的な理由があるかもしれないと言って、これに注意する必要があります。基本的に、単純型( )は、事前定義された型( )intの単なるエイリアスです。これを行う理由が不要であることを確認するのに役立つ可能性のあるいくつかのポイントは、C#の言語ガイドから直接得られます...structSystem.Int32

"単純型sbyteは予約語( 、、byte...、、、、 ... 、、int)で識別されますが、これらの予約語は名前空間(、、... 、など)の事前定義された型の単なるエイリアスです。単純型は型をエイリアスし、すべての単純型にはメンバーがあります。たとえば、で宣言されたメンバーと継承されたメンバー、および次のようなステートメントがあります。longfloatdoublestructSystemSystem.SByteSystem.ByteSystem.Int32structintSystem.Int32System.Object

int i = int.MaxValue;    // System.int32.MaxValue constant.
string s = i.ToString(); // System.Int32.ToString() instance method.

許可されています。」

これは続きますが、一般的な要点は、単純な型は単なるエイリアスであるということです-それだけです。あなたが何を説明するかをする理由はありません。

これがお役に立てば幸いです。

于 2012-06-29T10:31:56.523 に答える
0

このルールは、多言語環境で作業している場合、またはフレームワークや共有ライブラリを開発している場合に意味があります。

まず、使用されているすべてのタイプがCLSでサポートされていることを保証します(1を参照)。次に、同じタイプが異なる.Net言語で異なる名前を持つことによって発生する可能性のある混乱を回避します。

このトピックについては、「フレームワーク設計ガイドライン:再利用可能な.Netライブラリの規則、イディオム、およびパターン」という本で説明されています。これを強くお勧めします。

共通言語仕様

于 2012-06-29T10:44:09.373 に答える