Haruskah saya menggunakan int atau Int32

352

Dalam C #, intdan Int32merupakan hal yang sama, tetapi saya telah membaca beberapa kali yang intlebih disukai Int32tanpa alasan yang diberikan. Apakah ada alasan, dan apakah saya harus peduli?

Graham
sumber
Tweet oleh Skeet tentang ini di mana ia lebih menyukai Int32 daripada int saat memprogram API.
comecme
@JohnBubriski: dan jangan lupa bahwa itu membutuhkan lebih sedikit pernyataan menggunakan untuk menggunakannya (atau Anda akan mengetik System.Int32)
sehe
Saya punya pertanyaan: kita tidak menggunakan tipe CLR secara langsung tetapi mengapa kita membutuhkannya ??
AminM
@JohnBubriski Pembaruan status Facebook lebih mudah diketik daripada sepotong kode. Berpikir buruk di sana! Lebih mudah membaca dan memahami jauh lebih penting daripada mengetik lebih mudah. When something can be read without effort, great effort has gone into its writing. Easy writing is hard reading
7hi4g0
Kemungkinan duplikat Apa perbedaan antara String dan string dalam C #?
Cole Johnson

Jawaban:

134

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

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

SpaceghostAli
sumber
271

Keduanya memang identik; intakan menjadi sedikit lebih familiar, Int32membuat 32-bitness lebih eksplisit bagi mereka yang membaca kode Anda. Saya akan cenderung menggunakan di intmana saya hanya perlu 'bilangan bulat', di Int32mana ukurannya penting (kode kriptografi, struktur) sehingga pengelola di masa depan akan tahu lebih aman untuk memperbesar intjika perlu, tetapi harus berhati-hati mengubahInt32 s dengan cara yang sama.

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

user6779
sumber
65
Orang yang membaca kode Anda harus tahu bahwa int adalah alias untuk System.Int32. Mengenai keterbacaan, konsistensi jauh lebih penting.
Troels Thomsen
11
Bagi Anda dengan pola pikir C ++ lama, IntPtr dirancang untuk menjadi 32 bit pada OS 32 bit dan 64 bit pada OS 64 bit. Perilaku ini secara khusus disebutkan dalam tag rangkumannya. msdn.microsoft.com/en-us/library/system.intptr(VS.71).aspx
diadem
87

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.

gagak
sumber
9
Jika Anda menggunakan Reflector untuk memeriksa tipe System.Int32 Anda akan menemukan bahwa itu adalah struct dan bukan kelas. Kode tersebut terlihat seperti ini: [Serializable, StructLayout (LayoutKind.Sequential), ComVisible (true)] public struct Int32: ICpembandingan, IFormattable, IConvertible, IComparable <int>, IEquatable <int> {public const int MaxValue = 0x7fffffff; ... Anda tidak dapat memperoleh tipe dari struct. Paling tidak Anda akan mendapatkan kesalahan yang memberi tahu Anda demikian. Namun, perilaku enum sedikit berbeda, yang akan saya komentari selanjutnya.
raddevus
16
Ketidakmampuan untuk mendapatkan enum dari Int32 adalah perilaku yang dirancang, yang juga dapat dilihat dengan melihat kode .NET: [Serializable, ComVisible (true)] kelas abstrak publik Enum: ValueType, IComparable, IFormattable, Perhatikan bahwa Enum diturunkan dari ValueType? Jika Anda mencoba untuk mendapatkan enum dari sesuatu yang lain selain tipe data intrinsik (int, byte, dll.) Anda akan menerima kesalahan yang terlihat seperti: Ketik byte, sbyte, pendek, ushort, int, uint, panjang, atau ulong diharapkan .
raddevus
2
@ siang hari perhatikan bahwa menentukan enumpenggunaan intbukan derive, tetapi menentukan underlying type; lihat msdn.microsoft.com/en-us/library/sbbt4032.aspx#code-snippet-2
Jeroen Wiert Pluimers
2
@JeroenWiertPluimers Namun, masih menarik mengapa mereka memilih untuk benar-benar memeriksa tipe yang mendasarinya dan melempar CS1008 , karena tipe yang mendasarinya hanya tipe konstanta dalam enum, sehingga tidak masalah ketika dikompilasi.
IllidanS4 ingin Monica kembali pada
5
@ IllidanS4, dengan kompiler baru Roslyn - ini sudah diperbaiki, dan kedua varian valid
Grundy
49

Saya selalu menggunakan tipe sistem - misalnya, Int32bukan int. Saya mengadopsi praktik ini setelah membaca Pemrograman .NET Framework Programming - penulis Jeffrey Richter membuat kasus 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 #, longmemetakan ke System.Int64 sementara di C ++ dengan ekstensi yang dikelola, longpeta 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
Remi Despres-Smyth
sumber
Masalah dengan ini adalah bahwa Visual Studio auto-complete masih menggunakan int. Jadi, jika Anda membuat List<Tuple<Int32, Boolean>> test = new, Visual Studio sekarang akan memasukkan List<Tuple<int, bool>>(). Apakah Anda tahu cara mengubah pelengkapan otomatis ini?
MrFox
2
Ya, itu adalah masalah; tidak, saya tidak tahu bagaimana cara mengubahnya begitu saja. Poin # 2 bukan masalah lagi bagi saya, karena saya cenderung menggunakan varsebanyak mungkin untuk mengurangi banyaknya kode. Di tempat-tempat sesekali di mana autocomplete masuk dan meludah di lantai saya, saya menyesuaikan secara manual - ini benar-benar satu atau dua detik dari waktu saya.
Remi Despres-Smyth
20

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.
Brownie
sumber
Dimungkinkan juga untuk membuat kelas 'var' Anda sendiri, tetapi itu tidak membuat orang enggan menggunakannya.
Neme
Setiap kata kunci adalah kata kunci C #. int sudah digunakan dalam C dan C ++. Jadi tidak ada yang khusus tentang itu.
MrFox
12

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

spoulson
sumber
8
@spoulson: Kesalahan komentar pada baris 1: Penugasan dilarang antara jenis yang sama. Ya, lelucon yang buruk.
Johann Gerell
22
Jika C # spec (itu adalah C #, tidak NET keputusan) pernah memutuskan untuk perubahan untuk membuat int64 bit, yang akan menjadi seperti perubahan melanggar bahwa saya tidak percaya itu mungkin (atau pasti masuk akal) untuk kode membela diri terhadap eventualities tersebut.
Jon Skeet
9

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) serta tidak dikelola / asli C ++.

Selama Anda mungkin tahu, dalam 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.

HidekiAI
sumber
Bukankah itu membatalkan tujuan .net? Apa itu F #, ide yang Gates miliki dengan pensiunnya ...
Nick Turner
8

Tidak ada perbedaan antara intdan Int32, tetapi seperti intkata kunci bahasa banyak orang lebih suka gaya (seperti dengan stringvs String).

Simon Steele
sumber
7

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

  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. :)

Greg D
sumber
7

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.

Mark A. Nicolosi
sumber
5

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.

Raithlin
sumber
5

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 mengenali setidaknya ada alternatif itu menjadi terlalu mudah bagi int untuk menjadi "THE integer type".

  • Kelas dalam kerangka 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.MaxValueAtau Int32 lMax = Int32.MaxValue?

  • int bukan kata kunci dalam semua bahasa .NET.

  • Meskipun ada argumen mengapa itu tidak mungkin 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
}

Tetapi ini akan:

public enum MyEnum : int
{
    AEnum = 0
}
tidak diketahui (yahoo)
sumber
Anda mengatakan "Nama untuk integer 16 bit adalah Int16, untuk integer 64 bit itu adalah Int64, dan untuk integer 32 bit, pilihan intuitifnya adalah: int atau Int32?", Tetapi ada kata kunci C # untuk ini juga. Int16 = pendek Int64 = panjang Jadi, titik salah satu jawaban Anda didasarkan pada asumsi yang salah.
Mel
"variabel tipe int adalah pertanyaan dan pertanyaan yang benar-benar valid, tidak peduli seberapa sepele, mengganggu, menyebabkan kebingungan, membuang waktu, menghalangi diskusi, dll. (fakta pertanyaan ini ada membuktikan intinya)." Apakah kamu bercanda? Anda bekerja dalam bahasa yang tidak sepenuhnya Anda mengerti apa yang ada di balik tudung. Jika pengembang tidak mengerti apa artinya tipe primitif, ia harus mengambil seni kuliner. Kedengarannya seperti pengembang VB. menggunakan primitif adalah bahasa asli untuk bahasa apa pun dan harus lebih disukai. Tidak apa-apa jika Anda tidak suka primitif, tetapi jangan mengarang kenyataan.
Nick Turner
Hmm, saya sangat tidak setuju dengan pendapat Anda bahwa saya harus peduli ... tapi saya tidak tahu bahwa enum hanya dapat diwarisi dari kata kunci. Fakta yang sangat tidak berguna, tapi tetap menyenangkan untuk diketahui :)
Jowen
4

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

yhdezalvarez
sumber
1
Anda tidak bisa serius ... membuat porting lebih mudah? Saya tidak berpikir menemukan dan mengganti adalah masalah besar.
Vince Panuccio
2
(int saat ini adalah alias untuk System.Int32 tapi itu bisa berubah) ? Oh, datanglah ... Apakah kamu serius?
Oybek
Mengapa Anda menulis kode dalam bahasa yang ingin Anda buang pada akhirnya? Sepertinya dengan keputusan manajemen. Gunakan int atau Int32. Int32 terlihat seperti VB
Nick Turner
Yang saya maksud adalah MAYBE itu, (dan itu MAYBE besar, saya tidak benar-benar tahu mengapa para desainer melakukannya dengan cara seperti itu) Anda harus memiliki cara untuk mendeklarasikan sebuah int yang memiliki lebar yang sama dengan lengkungan yang Anda jalankan, seperti C int / long / ... berfungsi. Ini adalah mekanisme (int ke alias int32) yang tampaknya dirancang untuk melakukan ini. Dan dengan mempertimbangkan Microsoft selalu merekomendasikan menggunakan "int" vs "Int32" (seperti yang akan mereka lakukan jika ini adalah niat asli mereka). Saya tahu, itu JIKA besar ... Ketika saya menulis jawaban ini, tidak ada sedikit pun .NET framework, jadi saya tidak tahu apa yang akan mereka lakukan dalam kasus itu.
Yanko Hernández Alvarez
3

int adalah pintasan bahasa C # untuk System.Int32

Meskipun ini berarti bahwa Microsoft dapat mengubah pemetaan ini, sebuah posting pada diskusi FogCreek menyatakan [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 32 bit dan panjang 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. "

Ray Hayes
sumber
Jika versi 64-bit diperkenalkan, mereka mungkin akan menambahkan 'nativeint' ke C # (karena saat ini digunakan dalam F #). Ini hanya memperkuat bahwa memperkenalkan 'int' dan mendefinisikan ini sebagai Int32 adalah kesalahan! Dan sangat tidak konsisten dari API (yaitu ReadInt32 bukan ReadInt), warna (gelap vs biru muda) dan sensitivitas case (DateTime vs int) sudut pandang. yaitu mengapa tipe nilai 'DateTime' tidak memiliki alias seperti Int32?
Carlo Bos
3

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 ...

Jack Bolding
sumber
3

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, kami untungnya tidak melihat banyak 16-bit lagi, dan ketika 64-bit mulai mendapatkan orang-orang populer yang lebih peduli dengan membuatnya kompatibel dengan perangkat lunak yang lebih tua dan 32-bit telah ada begitu lama bahwa untuk sebagian besar kompiler sebuah int hanya diasumsikan 32 bit.

Peter Mortensen
sumber
3

Saya akan merekomendasikan menggunakan Microsoft StyleCop .

Ini 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.

devstuff
sumber
Saya sepenuhnya tidak setuju dengan StyleCop yang satu ini. ya itu bagus tapi saya lebih suka menggunakan Int32, mengapa? untuk menghindari jawaban seperti dua yang diturunkan. Orang bingung dengan Int32 bagaimana ints diwakili dalam C
John Demetriou
2

intdan Int32sama. intadalah alias untuk Int32.

Jesper Kihlberg
sumber
int bukan alias, itu kata kunci. Lihat jawaban lainnya.
Timores
int jelas merupakan kata kunci untuk bahasa tersebut tetapi juga bisa disebut sebagai alias dari System.Int32. Selain itu, cara lain untuk memikirkan ini adalah Anda memiliki using int = System.Int32; arahan untuk semua file kode sumber Anda.
uygar donduran
2

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.

David Basarab
sumber
Saya akan menambahkan bahwa Anda dapat menggunakan kata kunci "panjang" alih-alih System.Int64
Keith
22
Anda salah paham pertanyaannya. OP menanyakan apakah ada perbedaan antara deklarasi "int i" dan "Int32 i".
gagak
2

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");
chrisb
sumber
1

Saya menggunakan int jika Microsoft mengubah implementasi default untuk integer ke beberapa versi ketinggalan jaman baru (sebut saja Int32b).

Microsoft kemudian dapat mengubah alias int ke Int32b, dan saya tidak perlu mengubah kode saya untuk mengambil keuntungan dari implementasi integer baru mereka (dan semoga ditingkatkan).

Hal yang sama berlaku untuk semua jenis kata kunci.

anon
sumber
0

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 tahu Anda akan membutuhkan lebih dari 32-bit misalnya)

Stacker
sumber
0

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

Lihat juga jawaban saya di sini untuk pertanyaan terkait.

Keith
sumber
0

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.

bovium
sumber
0

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 (yaitu Int32 dan bukan int).

Juga baik untuk menentukan awalan untuk variabel tipe yang berbeda (misalnya b untuk byte 8 bit, w untuk kata 16 bit, dan l untuk kata panjang 32 bit => 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.

user11211
sumber
Tidak ada bedanya dalam .Net - int selalu Int32 dan lama selalu Int64
Keith
It is also good to specify prefixes for different type variablesNotasi Hungaria sebagian besar sudah usang saat ini dan sebagian besar gaya pengkodean mencegah penggunaannya. Konvensi internal perusahaan perangkat lunak juga sering melarang notasi itu
phuclv
0

Menggunakan Int32tipe ini membutuhkan referensi namespace System, atau kualifikasi penuh ( System.Int32). Saya cenderung ke arah itu int, karena tidak memerlukan impor namespace, karena itu mengurangi kemungkinan tabrakan namespace dalam beberapa kasus. Saat dikompilasi ke IL, tidak ada perbedaan di antara keduanya.

Michael Meadows
sumber
0

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

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 .)

Chris Pietschmann
sumber
0

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 ia 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: Int32 notation vs int

Schmuli
sumber