C#では、int
とInt32
は同じものですが、何の理由もなくint
がInt32
より優先されることを何度も読みました。理由はありますか、私は気にする必要がありますか?
ECMA-334 :2006C#言語仕様(p18):
事前定義タイプはそれぞれ、システム提供タイプの省略形です。たとえば、キーワード
int
は構造体System.Int32
を参照します。スタイルの問題として、キーワードの使用は完全なシステムタイプ名の使用よりも優先されます。
2つは確かに同義です。 int
name__はもう少し見慣れたものになります。Int32
を使用すると、コードを読んでいる人にとって32ビットがより明確になります。 「整数」が必要な場合はint
name__、サイズが重要な場合はInt32
(暗号化コード、構造体)を使用する傾向があるため、将来の保守担当者は、必要に応じてint
name__を拡大しても安全であることがわかりますが、注意が必要ですInt32
sを同じ方法で変更します。
結果のコードは同一になります。違いは純粋に読みやすさまたはコードの外観です。
どちらも32ビット整数を宣言しています。他のポスターが述べているように、どちらを使用するかは主に構文スタイルの問題です。しかし、彼らはいつも同じように動作するわけではありません。たとえば、C#コンパイラはこれを許可しません。
public enum MyEnum : Int32
{
member1 = 0
}
しかしそれはこれを可能にします:
public enum MyEnum : int
{
member1 = 0
}
図に行きます。
私は常にシステムタイプを使用します - 例えばintではなくInt32です。 Applied .NET Framework Programmingを読んだ後、私はこのプラクティスを採用しました。 。ここで私が立ち往生している2つのポイントがあります:
型名は.NET言語によって異なります。たとえば、C#では、long
はSystem.Int64にマッピングされますが、マネージ拡張機能付きのC++では、long
はInt32にマッピングされます。 .NETを使用している間は言語を混在させることができるので、読者の好みの言語に関係なく、明示的なクラス名を使用すると常に明確になります。
多くのフレームワークメソッドは、それらのメソッド名の一部として型名を持ちます。
BinaryReader br = new BinaryReader( /* ... */ );
float val = br.ReadSingle(); // OK, but it looks a little odd...
Single val = br.ReadSingle(); // OK, and is easier to read
intはC#のキーワードであり、明確です。
ほとんどの場合重要ではありませんが、Int32には2つの問題があります。
すでに述べたように、int
= Int32
。安全のために、データ型の境界を気にするものを実装するときは、必ずint.MinValue
/int.MaxValue
を使用してください。 .NETがint
をInt64
に変更すると決定したとします。コードの境界への依存度は低くなります。
1つの言語だけを扱う必要がある場合(および数学のオーバーフローについて気にする必要がないコードの場合)、型のバイトサイズはそれほど面白くありません。興味深いのは、ある言語から別の言語へのブリッジ、C#からCOMオブジェクトへのブリッジなどを行っているとき、またはビットシフトやマスキングを行っていて、自分自身(およびコードレビューの共同執筆者)を思い出させる必要がある場合です。データのサイズ.
実際には、管理されていない/ネイティブのC++と同様にマネージドC++(たとえばC#へのブリッジ)を作成するため、Int32を使用してサイズを判断します。
ご存じのとおり、C#では64ビットですが、ネイティブC++では32ビットになります。つまり、charはUnicode/16ビットですが、C++では8ビットです。しかし、これをどうやって知るのでしょうか。答えは、私たちがマニュアルの中でそれを調べてきたからです。
C#と他の言語の間を橋渡しするコードを書くとき、時間と経験によって、あなたはより型に敏感になり始めるでしょう(ここの何人かの読者は "あなたはなぜだろうか?"と考えています)。先週コーディングした内容を思い出すことができません(または私のAPIドキュメントで「このパラメータは32ビット整数」と指定する必要はありません)。
F# (これまで使ったことはありませんが)では、int、を定義します。 int32、およびnativeint。同じ質問が発生するはずです、「私はどれを使用しますか」。他の人が述べたように、ほとんどの場合、それは重要ではないはずです(透明であるべきです)。しかし、私は、あいまいさを取り除くためにint32とuint32を選択します。
Int32をいつ使用するかを正当化するのは、どのアプリケーションをコーディングしているのか、誰がそれを使用しているのか、あなたとあなたのチームが従うコーディングプラクティスなどにのみ依存すると思います。
int
とInt32
の間に違いはありませんが、int
は言語キーワードであるため、多くの人が文体的にそれを好みます(string
vs String
と同じ)。
私の経験では、それは慣習的なことでした。 Int32よりもintを使用する技術的な理由はわかりませんが、
私はその最後のものが特に好きです。 :)
変数を定義するときは常にエイリアスタイプ(int、stringなど)を使い、静的メソッドにアクセスするときは実際の名前を使います。
int x, y;
...
String.Format ("{0}x{1}", x, y);
Int.TryParse()のようなものを見るのは醜いようです。スタイル以外にこれをする理由は他にありません。
それらは(ほとんど)同一ですが(違いは1つ[バグ]については下記を参照)、間違いなく気にする必要があり、Int32を使用する必要があります。
16ビット整数の名前はInt16です。 64ビット整数の場合はInt64です。32ビット整数の場合は直感的な選択肢は次のとおりです。intまたはInt32?
Int16型、Int32型、またはInt64型の変数のサイズに関する質問は自己参照型ですが、int型の変数のサイズに関する質問は完全に有効な質問です。混乱、時間の浪費、討論の妨げなどに。
Int32を使用すると、開発者はタイプの選択を意識するようになります。 intの大きさは?サイズが名前に含まれていると、その型のサイズが実際に考慮される可能性が高くなります。 Int32を使用すると、他の選択肢についての知識も深まります。人々が少なくとも別の方法があることを認識することを余儀なくされない場合、intが "整数型"になるのははるかに簡単になります。
32ビット整数と対話することを目的としたフレームワーク内のクラスはInt32という名前です。これもまた、より直観的で分かりにくく、(不必要な)翻訳(システム内の翻訳ではなく、開発者の頭の中での翻訳)を欠いている、などです。int lMax = Int32.MaxValue
またはInt32 lMax = Int32.MaxValue
?
intは、すべての.NET言語のキーワードではありません。
変更される可能性が低い理由はいくつかありますが、intは必ずしもInt32であるとは限りません。
欠点は、入力する文字が2つ増えて[バグ]になることです。
これはコンパイルされません
public enum MyEnum : Int32
{
AEnum = 0
}
しかし、これはなります:
public enum MyEnum : int
{
AEnum = 0
}
私はベストプラクティスはintを使用することであることを知っています、そしてすべてのMSDNコードはintを使用します。しかし、私の知る限りでは、標準化と一貫性以外に理由はありません。
気にしないでください。ほとんどの場合はint
を使用してください。それは将来あなたのプログラムをより広いアーキテクチャに移植するのを助けるでしょう(現在int
はSystem.Int32
へのエイリアスですが、それは変わるかもしれません)。変数のビット幅が重要な場合(たとえば:struct
のメモリ内のレイアウトを制御する場合)に限り、int32
およびその他(関連する "using System;
"と共に)を使用する必要があります。
intはSystem.Int32と同じで、コンパイル時に CIL と同じものになります。
C#はCおよびC++(およびJava)のようになりたいので、C#では慣例的にintを使用しています。
ところで、私はさまざまなWindows API関数のインポートを宣言するときにSystem.Int32を使用することになります。これが定義されている規約かどうかはわかりませんが、外部DLLを使用することになります。
かつて、intデータ型は、コンパイラが対象としているマシンのレジスタサイズに固定されていました。したがって、たとえば、16ビットシステム用のコンパイラは16ビット整数を使用します。
しかし、ありがたいことに16ビットはそれほど見られなくなりました。64ビットが普及し始めたとき、古いソフトウェアとの互換性を重視するようになり、32ビットが登場してからほとんどのコンパイラにとって intは32ビットと仮定されています。
intはSystem.Int32に対するC#言語のショートカットです。
これはMicrosoftがこのマッピングを変更できることを意味するが、FogCreekの議論に関する投稿は [source] を述べた
"64ビットの問題について - マイクロソフトは64ビットバージョンの.NET Frameworkに取り組んでいますが、そのシステムではintが64ビットに対応していないと確信しています。
理由:
1。 C#ECMA規格では、intは32ビット、longは64ビットであると明確に述べられています。
2。 Microsoftは、Array.GetLengthに加えてArray.GetLongLengthのようなint値の代わりにlong値を返す、Frameworkバージョン1.1の追加のプロパティとメソッドを導入しました。
それで、すべての組み込みC#型は現在のマッピングを維持すると言っても安全だと思います。」
気にしないでください。サイズが問題になる場合は、byte、short、int、そしてlongを使用します。 int32より大きいintを使用する唯一の理由は、2147483647より大きい数値または-2147483648より小さい数値が必要な場合です。
私が気にしないということ以外に、他にも気になることがたくさんあります。
int
とInt32
は同じです。 int
はInt32
のエイリアスです。
実際には違いはなく、やがてあなたはあなた自身の規約を採用するでしょう。型を割り当てるときはキーワードを使い、静的メソッドなどを使うときはクラスのバージョンを使います。
int total = Int32.Parse( "1009");
この表で定義されているように、int
はSystem.Int32
のエイリアスです。 組み込み型テーブル(C#リファレンス)
IntまたはInt32の使用は同じですIntは読者のためのコードを単純化するための単なる砂糖です。
NULL可能バリアントIntを使用しますか。またはInt32? nullを含むフィールドでデータベースを操作するとき。それはあなたに多くのランタイム問題からあなたを救うでしょう。
しばらく前に、Microsoft .NET CLR製品チームの誰かからの訪問を受けたとき、私はMicrosoftとのプロジェクトに取り組んでいました。この人は例をコーディングし、彼が彼の変数を定義するとき彼は“ Int32” vs.“ int”と“ String” vs“ string”を使いました。
私はマイクロソフトの他のサンプルコードでこのスタイルを見たことを思い出しました。それで、私はいくつかの研究をしました、そして、誰もが「Int32」と「int」の間に構文着色を除いて違いがないと言うことを発見しました。実際、私はあなたがあなたのコードをもっと読みやすくするためにあなたが“ Int32”を使うことを提案する多くの資料を見つけました。そこで、私はそのスタイルを採用しました。
先日、私は違いを見つけました! 「Int32」を使用してenumを入力することはコンパイラで許可されていませんが、「int」を使用した場合は許可されています。私はまだ知らないのでなぜ私に尋ねないでください。
例:
public enum MyEnum : Int32
{
AEnum = 0
}
これはうまくいきます。
public enum MyEnum : int
{
AEnum = 0
}
撮影元: Int32表記vs int
プラットフォームによってはintのサイズが異なるコンパイラもあります(C#固有ではありません)。
いくつかのコーディング規格(MISRA C)は、使用されるすべてのタイプがサイズ指定(すなわち、Int32ではなくintである)であることを要求する。
異なる型変数に接頭辞を指定するのも良いでしょう(例えば、8ビットバイトの場合はb、16ビットWordの場合はw、32ビット長の場合はl)=> Int32 lMyVariable
コードの移植性と保守性が向上するため、注意が必要です。
あなたがいつもC#を使用しようとしていて、C#の仕様がこの点で変わることがないのであれば、PortableはC#には適用できないかもしれません。
あなたのコードを保守している人はこの特定のC#の仕様に気付いていないかもしれないし、バグがあるのを見逃すかもしれないので、保守可能なihmoは常に適用可能です。
たとえば年の月を数える単純なforループでは、気にしなくても構いませんが、フローを迂回する可能性があるコンテキストで変数を使用する場合は気にする必要があります。
あなたがそれについて少し賢明な操作をするつもりであるならば、あなたはまた気にするべきです。
非常に特殊な数学関数や特定のアーキテクチャ向けに最適化されたコードを記述する必要がない限り、ほとんどのプログラミング言語を気にするべきではありません。 知っている例えば32ビット以上必要でしょう)
Int32
型を使用するには、System
への名前空間参照、または完全修飾(System.Int32
)が必要です。名前空間のインポートを必要としないため、名前空間が衝突する可能性が少なくなるため、int
を使用する傾向があります。 ILにコンパイルした場合、両者に違いはありません。
関係ありません。 intは言語キーワード、Int32は実際のシステムタイプです。
関連する質問への私の ここで答え も参照してください。
Visual Studio 2012のイミディエイトウィンドウによると、Int32はint、Int64はlongです。これが出力です。
sizeof(int)
4
sizeof(Int32)
4
sizeof(Int64)
8
Int32
int
base {System.ValueType}: System.ValueType
MaxValue: 2147483647
MinValue: -2147483648
Int64
long
base {System.ValueType}: System.ValueType
MaxValue: 9223372036854775807
MinValue: -9223372036854775808
int
int
base {System.ValueType}: System.ValueType
MaxValue: 2147483647
MinValue: -2147483648
Int16も検討してください。整数をアプリケーションのメモリに格納する必要があり、メモリの使用量が心配な場合は、Int32よりもメモリの使用量が少なく、最小/最大範囲が小さいため、Int16を使用できます(これはintです)。 。)