it-swarm-id.com

Haruskah saya menggunakan int atau Int32

Dalam C #, int dan Int32 adalah hal yang sama, tetapi saya telah membaca beberapa kali int lebih disukai daripada Int32 tanpa alasan yang diberikan. Apakah ada alasan, dan apakah saya harus peduli?

340
Graham

ECMA-334 : 2006 C # Spesifikasi Bahasa (p18):

Setiap jenis yang telah ditentukan adalah singkatan untuk jenis yang disediakan sistem. Misalnya, kata kunci int mengacu pada struct System.Int32. Sebagai soal gaya, penggunaan kata kunci lebih disukai daripada penggunaan nama jenis sistem yang lengkap.

127
SpaceghostAli

Keduanya memang identik; int akan sedikit lebih familiar, Int32 membuat 32-bitness lebih eksplisit bagi mereka yang membaca kode Anda. Saya akan cenderung menggunakan int di mana saya hanya perlu 'bilangan bulat', Int32 di mana ukurannya penting (kode kriptografi, struktur) sehingga pengelola masa depan akan tahu bahwa aman untuk memperbesar int jika sesuai, tetapi harus berhati-hati mengubah Int32s dengan cara yang sama.

Kode yang dihasilkan akan sama: perbedaannya adalah murni dari keterbacaan atau penampilan kode.

266
James Sutherland

Keduanya mendeklarasikan bilangan bulat 32 bit, dan seperti yang dinyatakan poster lainnya, yang mana yang Anda gunakan sebagian besar merupakan masalah gaya sintaksis. Namun mereka tidak selalu berperilaku dengan cara yang sama. Sebagai contoh, kompiler C # tidak akan mengizinkan ini:

public enum MyEnum : Int32
{
    member1 = 0
}

tetapi itu akan memungkinkan ini:

public enum MyEnum : int
{
    member1 = 0
}

Sosok pergi.

85
raven

Saya selalu menggunakan jenis sistem - mis., Int32, bukan int. Saya mengadopsi praktik ini setelah membaca Applied .NET Framework Programming - penulis Jeffrey Richter membuat alasan yang baik untuk menggunakan nama tipe lengkap . Inilah dua poin yang melekat pada saya:

  1. Ketik nama dapat bervariasi di antara bahasa .NET. Misalnya, dalam C #, long memetakan ke System.Int64 sementara di C++ dengan ekstensi terkelola, long memetakan ke Int32. Karena bahasa dapat dicampur-dan-cocokkan saat menggunakan .NET, Anda dapat yakin bahwa menggunakan nama kelas eksplisit akan selalu lebih jelas, tidak peduli bahasa yang disukai pembaca.

  2. Banyak metode framework memiliki nama ketik sebagai bagian dari nama metode mereka:

    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

48

int adalah kata kunci C # dan tidak ambigu.

Sebagian besar waktu itu tidak masalah tetapi dua hal yang bertentangan dengan Int32:

  • Anda harus memiliki "menggunakan Sistem;" pernyataan. menggunakan "int" tidak memerlukan pernyataan menggunakan.
  • Dimungkinkan untuk mendefinisikan kelas Anda sendiri yang disebut Int32 (yang akan konyol dan membingungkan). int selalu berarti int.
20
Brownie

Seperti yang telah dinyatakan, int = Int32. Agar aman, pastikan untuk selalu menggunakan int.MinValue/int.MaxValue saat menerapkan apa pun yang peduli tentang batasan tipe data. Misalkan .NET memutuskan bahwa int sekarang akan menjadi Int64, kode Anda akan kurang bergantung pada batasan.

12
spoulson

Ukuran byte untuk tipe tidak terlalu menarik ketika Anda hanya perlu berurusan dengan satu bahasa (dan untuk kode yang Anda tidak perlu mengingatkan diri sendiri tentang kelebihan matematika). Bagian yang menjadi menarik adalah ketika Anda menjembatani antara satu bahasa ke bahasa lain, C # ke objek COM, dll., Atau Anda melakukan sedikit perubahan atau penyembunyian dan Anda perlu mengingatkan diri sendiri (dan co-wokers review-kode Anda) dari ukuran data.

Dalam prakteknya, saya biasanya menggunakan Int32 hanya untuk mengingatkan diri saya sendiri berapa ukurannya karena saya menulis managed C++ (untuk menjembatani ke C # misalnya) dan juga tidak dikelola/asli C++.

Selama Anda mungkin tahu, di C # adalah 64-bit, tetapi dalam bahasa asli C++, berakhir sebagai 32-bit, atau char adalah unicode/16-bit sedangkan di C++ itu adalah 8-bit. Tapi bagaimana kita tahu ini? Jawabannya adalah, karena kami telah mencarinya di manual dan dikatakan demikian.

Dengan waktu dan pengalaman, Anda akan mulai menjadi lebih tipe-teliti ketika Anda menulis kode untuk menjembatani antara C # dan bahasa lain (beberapa pembaca di sini berpikir "mengapa Anda mau?"), Tapi IMHO saya percaya itu adalah praktik yang lebih baik karena Saya tidak ingat apa yang saya kodekan minggu lalu (atau saya tidak harus menentukan dalam dokumen API saya bahwa "parameter ini adalah integer 32-bit").

Dalam F # (walaupun saya belum pernah menggunakannya), mereka mendefinisikan int , int32 , dan nativeint . Pertanyaan yang sama harus muncul, "yang mana yang saya gunakan?". Seperti yang disebutkan orang lain, dalam banyak kasus, itu tidak masalah (harus transparan). Tetapi saya untuk satu akan memilih int32 dan uint32 hanya untuk menghapus ambiguitas.

Saya kira itu hanya akan tergantung pada aplikasi apa yang Anda koding, siapa yang menggunakannya, apa praktik pengkodean yang Anda dan tim Anda ikuti, dll. Untuk membenarkan kapan harus menggunakan Int32.

9
HidekiAI

Tidak ada perbedaan antara int dan Int32, tetapi karena int adalah kata kunci bahasa, banyak orang lebih menyukainya dengan gaya (seperti halnya dengan string vs String).

8
Simon Steele

Menurut pengalaman saya, itu adalah hal yang biasa. Saya tidak mengetahui alasan teknis untuk menggunakan int melalui Int32, tetapi:

  1. Lebih cepat mengetik.
  2. Lebih akrab dengan pengembang C # biasa.
  3. Warna berbeda dalam penyorotan sintaksis visual studio standar.

Saya terutama menyukai yang terakhir. :)

7
Greg D

Saya selalu menggunakan tipe alias (int, string, dll.) Ketika mendefinisikan variabel dan menggunakan nama asli ketika mengakses metode statis:

int x, y;
...
String.Format ("{0}x{1}", x, y);

Sepertinya jelek untuk melihat sesuatu seperti int.TryParse (). Tidak ada alasan lain mengapa saya melakukan ini selain gaya.

6
Mark A. Nicolosi

Meskipun mereka (kebanyakan) identik (lihat di bawah untuk satu perbedaan [bug]), Anda pasti harus peduli dan Anda harus menggunakan Int32.

  • Nama untuk bilangan bulat 16-bit adalah Int16. Untuk integer 64 bit, itu Int64, dan untuk integer 32-bit, pilihan intuitifnya adalah: int atau Int32?

  • Pertanyaan tentang ukuran variabel tipe Int16, Int32, atau Int64 adalah referensi-sendiri, tetapi pertanyaan tentang ukuran variabel tipe int adalah pertanyaan dan pertanyaan yang benar-benar valid, tidak peduli seberapa sepele, mengganggu, memimpin untuk kebingungan, buang waktu, menghalangi diskusi, dll. (fakta pertanyaan ini ada membuktikan intinya).

  • Menggunakan Int32 mempromosikan bahwa pengembang sadar akan pilihan tipe mereka. Seberapa besar int lagi? Oh ya, 32. Kemungkinan bahwa ukuran jenis akan benar-benar dipertimbangkan lebih besar ketika ukuran termasuk dalam nama. Menggunakan Int32 juga mempromosikan pengetahuan tentang pilihan lain. Ketika orang tidak dipaksa untuk setidaknya mengenali ada alternatif itu menjadi terlalu mudah bagi int untuk menjadi "tipe integer".

  • Kelas dalam kerangka kerja yang dimaksudkan untuk berinteraksi dengan bilangan bulat 32-bit bernama Int32. Sekali lagi, yaitu: lebih intuitif, kurang membingungkan, tidak memiliki terjemahan (tidak perlu) (bukan terjemahan dalam sistem, tetapi dalam pikiran pengembang), dll. int lMax = Int32.MaxValue atau Int32 lMax = Int32.MaxValue?

  • int bukan kata kunci dalam semua bahasa .NET.

  • Meskipun ada argumen mengapa itu tidak akan pernah berubah, int mungkin tidak selalu menjadi Int32.

Kekurangannya adalah dua karakter tambahan untuk diketik dan [bug].

Ini tidak akan dikompilasi

public enum MyEnum : Int32
{
    AEnum = 0
}

Tapi ini akan:

public enum MyEnum : int
{
    AEnum = 0
}
5
unknown (yahoo)

Saya tahu bahwa praktik terbaik adalah menggunakan int, dan semua kode MSDN menggunakan int. Namun, tidak ada alasan di luar standardisasi dan konsistensi sejauh yang saya tahu.

5
Raithlin

Anda seharusnya tidak peduli. Anda harus menggunakan int sebagian besar waktu. Ini akan membantu porting program Anda ke arsitektur yang lebih luas di masa depan (saat ini int adalah alias untuk System.Int32 tetapi itu bisa berubah). Hanya ketika lebar bit variabel yang penting (misalnya: untuk mengontrol tata letak dalam memori struct) Anda harus menggunakan int32 dan lainnya (dengan "using System;") yang terkait.

4
yhdezalvarez

Saya sarankan menggunakan Microsoft StyleCop .

Itu seperti FxCop , tetapi untuk masalah yang berhubungan dengan gaya. Konfigurasi default cocok dengan panduan gaya internal Microsoft, tetapi dapat disesuaikan untuk proyek Anda.

Dibutuhkan sedikit waktu untuk membiasakan diri, tetapi itu pasti membuat kode Anda lebih baik.

Anda dapat memasukkannya dalam proses pembuatan untuk memeriksa pelanggaran secara otomatis.

3
devstuff

int sama dengan System.Int32 dan ketika dikompilasi akan berubah menjadi hal yang sama di CIL .

Kami menggunakan int dengan konvensi dalam C # karena C # ingin terlihat seperti C dan C++ (dan Java) dan itulah yang kami gunakan di sana ...

BTW, saya akhirnya menggunakan System.Int32 ketika mendeklarasikan impor berbagai fungsi Windows API. Saya tidak yakin apakah ini adalah konvensi yang ditentukan atau tidak, tetapi mengingatkan saya bahwa saya akan ke DLL eksternal ...

3
Jack Bolding

Sekali waktu, tipe data int dipatok ke ukuran register mesin yang ditargetkan oleh kompiler. Jadi, misalnya, kompiler untuk sistem 16-bit akan menggunakan integer 16-bit.

Namun, syukurlah kami tidak melihat banyak 16-bit lagi, dan ketika 64-bit mulai mendapatkan orang-orang populer lebih peduli untuk membuatnya kompatibel dengan perangkat lunak yang lebih lama dan 32-bit telah ada begitu lama sehingga bagi kebanyakan kompiler dan - int diasumsikan hanya 32 bit.

3
Joel Coehoorn

int adalah pintasan bahasa C # untuk System.Int32

Meskipun ini berarti bahwa Microsoft dapat mengubah pemetaan ini, sebuah posting pada diskusi FogCreek dinyatakan [sumber]

"Pada masalah 64 bit - Microsoft memang bekerja pada versi 64-bit dari .NET Framework tapi saya cukup yakin int TIDAK akan memetakan ke 64 bit pada sistem itu.

Alasan:

1. Standar C # ECMA secara khusus mengatakan bahwa int adalah 32 bit dan panjangnya 64 bit.

2. Microsoft memperkenalkan properti & metode tambahan dalam Framework versi 1.1 yang mengembalikan nilai panjang alih-alih nilai int, seperti Array.GetLongLength di samping Array.GetLength.

Jadi saya pikir aman untuk mengatakan bahwa semua tipe C # bawaan akan menjaga pemetaan mereka saat ini. "

3
Ray Hayes

Anda seharusnya tidak peduli. Jika ukuran menjadi perhatian saya akan menggunakan byte, pendek, int, lalu panjang. Satu-satunya alasan Anda akan menggunakan int lebih besar dari int32 adalah jika Anda memerlukan angka lebih tinggi dari 2147483647 atau lebih rendah dari -2147483648.

Selain itu saya tidak peduli, ada banyak item lain yang perlu diperhatikan.

2
David Basarab

int dan Int32 adalah sama. int adalah alias untuk Int32.

2
Jesper Kihlberg

Tidak ada bedanya dalam praktik dan dalam waktu Anda akan mengadopsi konvensi Anda sendiri. Saya cenderung menggunakan kata kunci saat menetapkan jenis, dan versi kelas saat menggunakan metode statis dan semacamnya:

int total = Int32.Parse ("1009");

2
chrisb

int adalah alias untuk System.Int32, sebagaimana didefinisikan dalam tabel ini: Tabel Jenis Bawaan (C # Referensi)

1
Jim T

Penggunaan Int atau Int32 adalah Int yang sama hanya gula untuk menyederhanakan kode untuk pembaca.

Gunakan varian Nullable Int? atau Int32? ketika Anda bekerja dengan database di bidang yang berisi nol. Itu akan menyelamatkan Anda dari banyak masalah runtime.

0
bovium

Beberapa waktu yang lalu saya mengerjakan proyek dengan Microsoft ketika kami mendapat kunjungan dari seseorang di tim produk Microsoft .NET CLR. Orang ini mengkodekan contoh dan ketika dia mendefinisikan variabelnya dia menggunakan "Int32" vs "int" dan "String" vs "string".

Saya ingat melihat gaya ini dalam kode contoh lain dari Microsoft. Jadi, saya melakukan riset dan menemukan bahwa semua orang mengatakan bahwa tidak ada perbedaan antara "Int32" dan "int" kecuali untuk pewarnaan sintaks. Bahkan, saya menemukan banyak bahan yang menyarankan Anda menggunakan "Int32" untuk membuat kode Anda lebih mudah dibaca. Jadi, saya mengadopsi gayanya.

Suatu hari saya menemukan perbedaan! Kompiler tidak memungkinkan Anda mengetik enum menggunakan "Int32", tetapi melakukannya saat Anda menggunakan "int". Jangan tanya kenapa karena saya belum tahu.

Contoh:

public  enum MyEnum : Int32
{
    AEnum = 0
}

Ini bekerja.

public enum MyEnum : int
{
    AEnum = 0
}

Diambil dari: Notasi Int32 vs. int

0
Schmuli

Beberapa kompiler memiliki ukuran yang berbeda untuk int pada platform yang berbeda (tidak spesifik C #)

Beberapa standar pengkodean (MISRA C) mensyaratkan bahwa semua jenis yang digunakan adalah ukuran yang ditentukan (mis. Int32 dan bukan int).

Juga baik untuk menentukan awalan untuk variabel tipe yang berbeda (mis. B untuk 8 bit byte, w untuk Word 16 bit, dan l untuk panjang 32 bit Word => Int32 lMyVariable)

Anda harus peduli karena itu membuat kode Anda lebih portabel dan lebih dapat dipelihara.

Portable mungkin tidak berlaku untuk C # jika Anda akan selalu menggunakan C # dan spesifikasi C # tidak akan pernah berubah dalam hal ini.

Ihmo yang dapat dipertahankan akan selalu berlaku, karena orang yang menjaga kode Anda mungkin tidak mengetahui spesifikasi C # ini, dan kehilangan bug jika sesekali menjadi lebih dari 2147483647.

Dalam for-loop sederhana yang dihitung sebagai contoh bulan dalam setahun, Anda tidak akan peduli, tetapi ketika Anda menggunakan variabel dalam konteks di mana ia bisa mengalir, Anda harus peduli.

Anda juga harus peduli jika Anda akan melakukan operasi bit-bijaksana di atasnya.

0
user11211

Anda seharusnya tidak peduli pada sebagian besar bahasa pemrograman, kecuali jika Anda perlu menulis fungsi matematika yang sangat spesifik, atau kode yang dioptimalkan untuk satu arsitektur spesifik ... Pastikan ukuran jenisnya cukup untuk Anda (gunakan sesuatu yang lebih besar dari Int jika Anda tah Anda akan membutuhkan lebih dari 32-bit misalnya)

0
Stacker

Menggunakan tipe Int32 membutuhkan referensi namespace ke System, atau sepenuhnya memenuhi syarat (System.Int32). Saya cenderung ke int, karena tidak memerlukan impor namespace, karena itu mengurangi kemungkinan tabrakan namespace dalam beberapa kasus. Saat dikompilasi ke IL, tidak ada perbedaan antara keduanya.

0
Michael Meadows

Itu tidak masalah. int adalah kata kunci bahasa dan Int32 jenis sistem yang sebenarnya.

Lihat juga jawaban saya di sini untuk pertanyaan terkait.

0
Keith

Menurut Jendela Segera di Visual Studio 2012 Int32 adalah int, Int64 panjang. Berikut hasilnya:

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
0
Selim

Juga pertimbangkan Int16. Jika Anda perlu menyimpan Integer dalam memori di aplikasi Anda dan Anda khawatir tentang jumlah memori yang digunakan, maka Anda bisa menggunakan Int16 karena menggunakan memeory lebih sedikit dan memiliki rentang min/max lebih kecil dari Int32 (yang int .)

0