मैं int या Int32 का उपयोग करना चाहिए


352

C # में, intऔर Int32एक ही बात है, लेकिन मैंने कई बार पढ़ा है जो बिना किसी कारण के साथ intपसंद किया Int32जाता है। क्या कोई कारण है, और मुझे परवाह करनी चाहिए?


इस बारे में स्कीट द्वारा ट्वीट जहां वह एपीआई के प्रोग्रामिंग के दौरान Int32 के पक्ष में है।
कॉमेके

@JohnBubriski: और यह नहीं भूलना चाहिए कि इसे इस्तेमाल करने के लिए बयानों का उपयोग करने की आवश्यकता कम है (या आप टाइप करेंगे System.Int32)
sehe

मेरे पास सवाल है: हम सीधे सीएलआर प्रकार का उपयोग नहीं कर रहे हैं लेकिन हमें उनकी आवश्यकता क्यों है ??
अमीनम

@JohnBubriski फेसबुक स्टेटस अपडेट कोड के एक टुकड़े से टाइप करना आसान है। वहाँ बुरा सोच! पढ़ने और समझने में आसान, टाइप करने में आसान से कहीं अधिक महत्वपूर्ण है। When something can be read without effort, great effort has gone into its writing. Easy writing is hard reading
7hi4g0

जवाबों:


134

ECMA-334 : 2006 C # भाषा विशिष्टता (p18):

पूर्वनिर्धारित प्रकारों में से प्रत्येक सिस्टम-प्रदान प्रकार के लिए आशुलिपि है। उदाहरण के लिए, कीवर्ड intसंरचना को संदर्भित करता है System.Int32। शैली के रूप में, कीवर्ड का उपयोग संपूर्ण सिस्टम प्रकार के नाम के उपयोग के पक्षधर है।


271

दो वास्तव में पर्यायवाची हैं; intथोड़ा अधिक परिचित होगा, Int32आपके कोड को पढ़ने वालों के लिए 32-बिटनेस को अधिक स्पष्ट करता है। मैं उपयोग करने के लिए इच्छुक intहूं जहां मुझे 'पूर्णांक' की आवश्यकता है, Int32जहां आकार महत्वपूर्ण है (क्रिप्टोग्राफ़िक कोड, संरचनाएं) इसलिए भविष्य के अनुचर यह जानेंगे कि intयदि उचित हो तो विस्तार करना सुरक्षित है , लेकिन Int32उसी तरह से एस को बदलने में सावधानी बरतनी चाहिए ।

परिणामी कोड समान होगा: अंतर विशुद्ध रूप से पठनीयता या कोड उपस्थिति में से एक है।


65
आपके कोड को पढ़ने वाले लोगों को पता होना चाहिए कि int System.Int32 के लिए एक उपनाम है। पठनीयता के संबंध में, संगति कहीं अधिक महत्वपूर्ण है।
ट्रॉल्स थॉमसन

11
पुराने C ++ मानसिकता वाले आप में से उन लोगों के लिए, IntPtr को 32 बिट OS पर 32 बिट्स और 64 बिट OS पर 64 बिट्स के लिए डिज़ाइन किया गया है। यह व्यवहार विशेष रूप से इसके सारांश टैग में उल्लिखित है। msdn.microsoft.com/en-us/library/system.intptr(VS.71).aspx
मुकुट

87

वे दोनों 32 बिट पूर्णांक घोषित करते हैं, और जैसा कि अन्य पोस्टर में कहा गया है, जो आप उपयोग करते हैं वह ज्यादातर वाक्यात्मक शैली का है। हालाँकि वे हमेशा एक जैसा व्यवहार नहीं करते हैं। उदाहरण के लिए, C # कंपाइलर इसकी अनुमति नहीं देगा:

public enum MyEnum : Int32
{
    member1 = 0
}

लेकिन यह इसकी अनुमति देगा:

public enum MyEnum : int
{
    member1 = 0
}

जाओ पता लगाओ।


9
यदि आप System.Int32 प्रकार की जांच करने के लिए परावर्तक का उपयोग करते हैं, तो आप पाएंगे कि यह एक संरचना है और एक वर्ग नहीं है। कोड इस तरह दिखता है: [सीरियलाइज़ेबल, स्ट्रक्चरलैयूट (लेआउटकाइंड। असेंशियल), कॉमविजिबल (ट्रू)] पब्लिक स्ट्रक्चर इंट 32: IComparable, IFormattable, IConvertible, IComparable <<>: IEquitable <int> {public const int MaxValue = 0x7fffffff; ... आप एक संरचना से एक प्रकार प्राप्त नहीं कर सकते। बहुत कम से कम आपको एक त्रुटि मिलेगी जो आपको ऐसा बताती है। हालांकि, एनम व्यवहार थोड़ा अलग है, जो मैं अगले पर टिप्पणी करूंगा।
मूलांक

16
Int32 से एक Enum प्राप्त करने में असमर्थता एक डिज़ाइन किया गया व्यवहार है, जिसे .NET कोड को देखकर भी देखा जा सकता है: [Serializable, ComVanish (true)] सार्वजनिक सार वर्ग Enum: ValueType, IComparable, IFormattable, ध्यान दें कि Enum व्युत्पन्न है। ValueType से? यदि आप एक आंतरिक डेटा प्रकार (int, बाइट, आदि) के अलावा किसी और से एक एनम प्राप्त करने का प्रयास करते हैं, तो आपको एक त्रुटि प्राप्त होगी जो दिखता है: टाइप बाइट, sbyte, लघु, ushort, int, uint, लंबा या लम्बा ।
मूलांक

2
@ daylight ध्यान दें कि निर्दिष्ट करने के लिए एक enumका उपयोग intनहीं है derive, लेकिन एक निर्दिष्ट underlying type; देखें msdn.microsoft.com/en-us/library/sbbt4032.aspx#code-snippet-2
जीरो वेर्ट प्लिमर्स

2
@JeroenWiertPluimers हालाँकि, यह अभी भी दिलचस्प है कि क्यों उन्होंने शाब्दिक रूप से अंतर्निहित प्रकार की जाँच करने और CS1008 को फेंकने के लिए चुना है , क्योंकि अंतर्निहित प्रकार सिर्फ एनम में स्थिरांक का प्रकार है, इसलिए यह वास्तव में बात नहीं करता है जब इसे संकलित किया जाता है।
इलिडान्स 4 मोनिका को

5
@ IllidanS4, नए संकलक रोजलिन के साथ - यह तय किया गया था, और दोनों प्रकार के वैध
ग्रुंडी

49

मैं हमेशा सिस्टम प्रकारों का उपयोग करता हूं - जैसे, के Int32बजाय int। मैंने एप्लाइड .NET फ्रेमवर्क प्रोग्रामिंग पढ़ने के बाद इस अभ्यास को अपनाया - लेखक जेफरी रिक्टर पूर्ण प्रकार के नामों का उपयोग करने के लिए एक अच्छा मामला बनाता है। यहां दो बिंदु दिए गए हैं जो मेरे साथ हैं:

  1. प्रकार नाम .NET भाषाओं के बीच भिन्न हो सकते हैं। उदाहरण के लिए, C # में, longनक्शे में System.Int64 जबकि C ++ में प्रबंधित एक्सटेंशन के साथ, longInt32 के नक्शे। चूंकि .NET का उपयोग करते समय भाषाओं को मिश्रित-और-मिलान किया जा सकता है, इसलिए आप यह सुनिश्चित कर सकते हैं कि स्पष्ट वर्ग नाम का उपयोग करना हमेशा स्पष्ट होगा, चाहे पाठक की पसंदीदा भाषा कोई भी हो।

  2. कई रूपरेखा पद्धतियों के नाम उनके विधि नाम के भाग के रूप में हैं:

    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 का उपयोग करता है। इसलिए यदि आप एक बनाते हैं List<Tuple<Int32, Boolean>> test = new, तो Visual Studio अब सम्मिलित करेगा List<Tuple<int, bool>>()। क्या आप इन ऑटो-पूर्णताओं को बदलने का एक तरीका जानते हैं?
13

2
हाँ, यह एक मुद्दा है; नहीं, मैं नहीं जानता कि उन्हें कैसे बदला जाए। बिंदु # 2 मेरे लिए अब कोई समस्या नहीं है, क्योंकि मैं varकोड की शब्दावलियों को कम करने के लिए जितना संभव हो उपयोग कर सकता हूं । उन सामयिक स्थानों में, जहां स्वत: पूर्णता आती है और मेरी मंजिल पर घूमती है, मैं स्वयं को समायोजित करता हूं - यह सचमुच मेरे समय का एक या दो है।
रेमी डेस्प्रेस-स्माइथ

20

int एक C # कीवर्ड है और असंदिग्ध है।

ज्यादातर समय यह मायने नहीं रखता है लेकिन दो चीजें जो इंट 32 के खिलाफ जाती हैं:

  • आपको "सिस्टम का उपयोग करना;" बयान। "int" के प्रयोग से कथन का उपयोग करने की आवश्यकता नहीं है।
  • Int32 नामक अपनी स्वयं की कक्षा को परिभाषित करना संभव है (जो मूर्खतापूर्ण और भ्रमित करने वाला होगा)। int का मतलब हमेशा int होता है।

अपनी स्वयं की 'var' क्लास बनाना भी संभव है, लेकिन यह लोगों को इसका उपयोग करने से हतोत्साहित नहीं करता है।
नेमे

हर कीवर्ड एक C # कीवर्ड है। int का उपयोग पहले से ही C और C ++ में किया गया था। तो इसके बारे में विशेष रूप से C # कुछ भी नहीं है।
०५:५५

12

जैसा कि पहले ही कहा गया है, int= Int32। सुरक्षित होने के लिए , डेटा प्रकार की सीमाओं के बारे में परवाह करने वाली किसी भी चीज़ को लागू करते समय int.MinValue/ हमेशा उपयोग करना सुनिश्चित करें int.MaxValue। मान लीजिए .NET ने निर्णय लिया कि intअब होगा Int64, आपका कोड सीमा पर कम निर्भर होगा।


8
@spoulson: पंक्ति 1 पर टिप्पणी त्रुटि: समान प्रकार के बीच निषिद्ध कार्य। हाँ, एक बुरा मजाक है।
जोहान गेरेल

22
सी # कल्पना (यह एक सी #, नहीं नेट निर्णय है) कभी परिवर्तन करने का फैसला किया बनाने के लिए अगर int64 बिट्स, कि हो सकता है इस तरह के एक तोड़ने परिवर्तन है कि मैं यह संभव (या निश्चित रूप से समझदार) है पर विश्वास नहीं है कोड के लिए रक्षा इस तरह के हालात के खिलाफ।
जॉन स्कीट

9

प्रकारों के लिए बाइट का आकार बहुत दिलचस्प नहीं है जब आपको केवल एक ही भाषा (और कोड के लिए जो आपको गणित के बारे में खुद को याद दिलाना नहीं है) से निपटना है। वह हिस्सा जो दिलचस्प हो जाता है, जब आप एक भाषा से दूसरी भाषा, C # से COM ऑब्जेक्ट आदि के बीच पुल करते हैं, या आप कुछ बिट-शिफ्टिंग या मास्किंग कर रहे हैं और आपको खुद को याद रखने की आवश्यकता है (और आपकी कोड-समीक्षा सह-वोकर) डेटा का आकार।

व्यवहार में, मैं आमतौर पर Int32 का उपयोग केवल अपने आप को याद दिलाने के लिए करता हूं कि वे किस आकार के हैं क्योंकि मैं प्रबंधित C ++ (उदाहरण के लिए C # को पुल करने के लिए) और साथ ही अप्रबंधित / मूल C ++ लिखता हूं।

जब तक आप शायद जानते हैं, C # में 64-बिट्स है, लेकिन मूल C ++ में, यह 32-बिट्स के रूप में समाप्त होता है, या char यूनिकोड / 16-बिट्स है जबकि C ++ में यह 8-बिट्स है। लेकिन हम यह कैसे जानते हैं? जवाब है, क्योंकि हमने इसे मैनुअल में देखा है और ऐसा कहा है।

समय और अनुभवों के साथ, आप अधिक प्रकार-ईमानदार होने लगेंगे जब आप सी # और अन्य भाषाओं के बीच पुल बनाने के लिए कोड लिखते हैं (यहां कुछ पाठक "आप क्यों करेंगे?" सोच रहे हैं), लेकिन आईएमएचओ का मानना ​​है कि यह एक बेहतर अभ्यास है क्योंकि? मुझे याद नहीं है कि मैंने पिछले सप्ताह क्या कोडित किया है (या मुझे अपने एपीआई दस्तावेज़ में यह निर्दिष्ट नहीं करना है कि "यह पैरामीटर 32-बिट पूर्णांक है")।

में एफ # (हालांकि मैं इसे उपयोग नहीं किया है), वे परिभाषित पूर्णांक , int32 , और nativeint । एक ही सवाल उठना चाहिए, "मैं किसका उपयोग करता हूं?"। जैसा कि दूसरों ने उल्लेख किया है, ज्यादातर मामलों में, यह कोई फर्क नहीं पड़ता (पारदर्शी होना चाहिए)। लेकिन मैं सिर्फ अस्पष्टताओं को दूर करने के लिए int32 और uint32 को चुनूंगा।

मुझे लगता है कि यह सिर्फ उन अनुप्रयोगों पर निर्भर करेगा जो आप कोडिंग कर रहे हैं, जो इसका उपयोग कर रहे हैं, क्या कोडिंग आप और आपकी टीम का अनुसरण करता है, आदि जब इंट 32 का उपयोग करने के लिए औचित्य साबित करने के लिए।


.Net के उद्देश्य को अमान्य नहीं करता है? F # वैसे भी, एक विचार गेट्स जो अपनी सेवानिवृत्ति के साथ दूर चला गया था ...
निक टर्नर

8

वहाँ कोई अंतर नहीं है intऔर Int32है, लेकिन के रूप में intएक भाषा कीवर्ड है कई लोगों को (बस के साथ के रूप में शैलीगत इसे पसंद करते stringबनाम String)।


7

मेरे अनुभव में यह एक सम्मेलन की बात है। मैं Int32 पर int का उपयोग करने के किसी भी तकनीकी कारण से अवगत नहीं हूं, लेकिन यह है:

  1. टाइप करने की जल्दी।
  2. ठेठ सी # डेवलपर के लिए अधिक परिचित।
  3. डिफ़ॉल्ट दृश्य स्टूडियो सिंटैक्स हाइलाइटिंग में एक अलग रंग।

मैं विशेष रूप से अंतिम एक का शौकीन हूं। :)


7

मैं हमेशा एक वेरिएंट को परिभाषित करते समय अलियास प्रकार (इंट, स्ट्रिंग, आदि) का उपयोग करता हूं और स्थिर नाम एक्सेस करते समय वास्तविक नाम का उपयोग करता हूं:

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

यह सिर्फ int.TryParse () की तरह कुछ देखने के लिए बदसूरत लगता है। कोई अन्य कारण नहीं है कि मैं स्टाइल के अलावा ऐसा करता हूं।


5

मुझे पता है कि सबसे अच्छा अभ्यास int का उपयोग करना है, और सभी MSDN कोड int का उपयोग करता है। हालाँकि, जहाँ तक मुझे पता है, मानकीकरण और स्थिरता से परे कोई कारण नहीं है।


5

हालांकि वे (ज्यादातर) समान हैं (एक [बग] अंतर के लिए नीचे देखें), आपको निश्चित रूप से परवाह करनी चाहिए और आपको इंट 32 का उपयोग करना चाहिए।

  • 16-बिट पूर्णांक का नाम Int16 है। एक 64 बिट पूर्णांक के लिए यह Int64 है, और 32-बिट पूर्णांक के लिए सहज ज्ञान युक्त विकल्प है: int या Int32?

  • Int16 प्रकार, Int32, या Int64 के एक चर के आकार का सवाल आत्म-संदर्भित है, लेकिन प्रकार int के एक चर के आकार का सवाल एक पूरी तरह से वैध प्रश्न और प्रश्न हैं, चाहे कितना भी तुच्छ हो, विचलित कर रहे हैं, सीसा भ्रम, व्यर्थ समय, बाधा चर्चा, आदि (तथ्य यह सवाल मौजूद है बात साबित होता है)।

  • Int32 का उपयोग यह दर्शाता है कि डेवलपर अपनी पसंद के प्रकार के प्रति सचेत है। एक इंट फिर से कितना बड़ा है? ओह, हाँ, 32. आकार में नाम शामिल होने पर वास्तव में जिस आकार के प्रकार पर विचार किया जाएगा, वह अधिक होगा। Int32 का उपयोग अन्य विकल्पों के ज्ञान को भी बढ़ावा देता है। जब लोगों को कम से कम पहचानने के लिए मजबूर नहीं किया जाता है, तो विकल्प हैं कि यह "पूर्णांक प्रकार" बनने के लिए बहुत आसान हो जाता है।

  • 32-बिट पूर्णांकों के साथ बातचीत करने के इरादे वाले वर्ग को Int32 नाम दिया गया है। एक बार फिर, जो है: अधिक सहज, कम भ्रामक, एक (अनावश्यक) अनुवाद का अभाव है (सिस्टम में अनुवाद नहीं है, लेकिन डेवलपर के दिमाग में), आदि int lMax = Int32.MaxValueया Int32 lMax = Int32.MaxValue?

  • int सभी .NET भाषाओं में एक कीवर्ड नहीं है।

  • हालाँकि इस बात के तर्क हैं कि हमेशा बदलने की संभावना क्यों नहीं है, int हमेशा एक Int32 नहीं हो सकता है।

कमियां टाइप करने के लिए दो अतिरिक्त अक्षर हैं और [बग]।

यह संकलन नहीं होगा

public enum MyEnum : Int32
{
    AEnum = 0
}

लेकिन यह होगा:

public enum MyEnum : int
{
    AEnum = 0
}

आप कहते हैं "16 बिट पूर्णांक के लिए नाम Int16 है, 64 बिट पूर्णांक के लिए यह Int64 है, और 32 बिट पूर्णांक के लिए सहज ज्ञान युक्त विकल्प है: int या Int32?", लेकिन इनके लिए C # कीवर्ड भी हैं। Int16 = लघु Int64 = लंबी बात तो आपका एक जवाब गलत धारणा पर आधारित है।
मेल

"प्रकार इंट का चर एक पूर्ण रूप से मान्य प्रश्न और प्रश्न है, चाहे कितना भी तुच्छ हो, विचलित करने वाला हो, भ्रम की स्थिति पैदा करता हो, व्यर्थ समय, बाधा चर्चा, आदि (तथ्य यह है कि प्रश्न मौजूद है बिंदु साबित होता है)।" क्या आप मेरे साथ मजाक कर रहे हैं? आप ऐसी भाषा में काम करते हैं जिसे आप पूरी तरह से नहीं समझते हैं कि हुड के पीछे क्या है। अगर डेवलपर को यह समझ में नहीं आता है कि वह किस प्रकार के आदिम प्रकार को समेटता है तो उसे पाक कलाओं को अपनाना चाहिए। एक VB डेवलपर की तरह लगता है। प्रिमिटिव का उपयोग करना किसी भी भाषा का मूल है और इसे प्राथमिकता दी जानी चाहिए। यदि आप आदिमों को पसंद नहीं करते हैं, तो यह ठीक है, लेकिन वास्तविकताओं को न समझें।
निक टर्नर

हम्म, मैं पूरी तरह से आपकी राय से असहमत हूं कि मुझे परवाह करनी चाहिए ... लेकिन मुझे नहीं पता था कि एनम केवल कीवर्ड से ही प्राप्त कर सकते हैं। एक बहुत ही बेकार तथ्य, लेकिन अभी भी जानने के लिए मजेदार है :)
जोवेन

4

आपको परवाह नहीं करनी चाहिए। आपको intज्यादातर समय का उपयोग करना चाहिए । यह आपके कार्यक्रम को भविष्य में एक व्यापक वास्तुकला में पोर्ट करने में मदद करेगा (वर्तमान intमें एक उपनाम है System.Int32लेकिन यह बदल सकता है)। केवल जब चर की थोड़ी चौड़ाई मायने रखती है (उदाहरण के लिए: लेआउट की स्मृति को नियंत्रित करने के लिए struct) आपको उपयोग करना चाहिए int32और अन्य (संबद्ध " using System;" के साथ)।


1
आप गंभीर नहीं हो सकते ... पोर्टिंग को आसान बनाते हैं? मुझे नहीं लगता कि ढूंढना और बदलना बहुत बड़ी बात है।
विंस पानुकियो

2
(वर्तमान में int, System.Int32 का एक उपनाम है, लेकिन यह बदल सकता है) ? ओह एक आओ ... क्या तुम गंभीर हो?
ओयबेक

आप ऐसी भाषा में कोड क्यों लिखेंगे, जिसे आप अंतत: कचरा करना चाहते हैं? प्रबंधन के फैसले से लगता है। Int या Int32 का उपयोग करें। Int32 VB की तरह दिखता है
निक टर्नर

मेरा मतलब यह था कि MAYBE, (और यह एक बड़ा MAYBE है, मैं वास्तव में नहीं जानता कि डिजाइनरों ने ऐसा क्यों किया था) आपके पास एक int घोषित करने का एक तरीका होना चाहिए जिसकी चौड़ाई उसी चौड़ाई पर हो जिस आर्क पर आप चल रहे हैं, जैसे C का int / long / ... काम करता है। यह एक तंत्र है (int to alias int32) जो ऐसा करने के लिए डिज़ाइन किया गया लगता है। और ध्यान रखें कि Microsoft हमेशा "int" बनाम "Int32" का उपयोग करने की सलाह देता है (ठीक वैसे ही जैसे कि यह उनका मूल उद्देश्य था)। मुझे पता है, यह एक बड़ा IF है ... जब मैंने यह उत्तर लिखा था, तो कोई 64 बिट .NET फ्रेमवर्क नहीं था, इसलिए मुझे नहीं पता था कि वे उस मामले में क्या करेंगे।
येंको हर्नांडेज़ अल्वारेज़

3

int System.Int32 के लिए C # भाषा का शॉर्टकट है

जबकि इसका मतलब यह है कि Microsoft इस मैपिंग को बदल सकता है, फोगक्रिक की चर्चाओं पर एक पोस्ट [स्रोत]

"64 बिट मुद्दे पर - Microsoft वास्तव में .NET फ्रेमवर्क के 64-बिट संस्करण पर काम कर रहा है, लेकिन मुझे पूरा यकीन है कि int उस सिस्टम पर 64 बिट पर मैप नहीं करेगा।

कारण:

1. C # ECMA मानक विशेष रूप से कहता है कि int 32 बिट है और लंबा 64 बिट है।

2. Microsoft ने फ्रेमवर्क संस्करण 1.1 में अतिरिक्त गुण और विधियाँ पेश कीं, जो इंट्रे वैल्यू के बजाय लॉन्ग वैल्यू लौटाते हैं, जैसे कि Array.GetLongLength Array.GetLength के अलावा।

इसलिए मुझे लगता है कि यह कहना सुरक्षित है कि सभी अंतर्निहित C # प्रकार अपनी वर्तमान मैपिंग रखेंगे। "


यदि 64-बिट संस्करण पेश किया जाता है, तो वे संभवतः C # में 'मूल' जोड़ देंगे (जैसा कि वर्तमान में F # में उपयोग किया जाता है)। यह सिर्फ पुष्ट करता है कि 'int' को शुरू करना और इसे Int32 के रूप में परिभाषित करना एक गलती थी! और इसलिए एक एपीआई (यानी ReadInt32 नहीं ReadInt) से असंगत, रंग (गहरा बनाम हल्का नीला) और मामले की संवेदनशीलता (डेटाइम बनाम इंट) दृष्टिकोण। यानी 'डेटाइम' प्रकार का मान Int32 जैसा उपनाम क्यों नहीं है?
कार्लो बोस

3

int System.Int32 के समान है और जब संकलित किया जाता है तो यह CIL में एक ही चीज में बदल जाएगा ।

हम C # में कन्वेंशन द्वारा int का उपयोग करते हैं क्योंकि C # C और C ++ (और जावा) की तरह दिखना चाहता है और यही हम उपयोग करते हैं ...

BTW, मैं विभिन्न विंडोज एपीआई कार्यों के आयात की घोषणा करते समय System.Int32 का उपयोग कर समाप्त करता हूं। मुझे यकीन नहीं है कि यह एक परिभाषित सम्मेलन है या नहीं, लेकिन यह मुझे याद दिलाता है कि मैं एक बाहरी DLL में जा रहा हूं ...


3

एक बार, इंट डेटेटाइप को कंपाइलर द्वारा लक्षित मशीन के रजिस्टर आकार में आंका गया था। इसलिए, उदाहरण के लिए, 16-बिट सिस्टम के लिए कंपाइलर 16-बिट पूर्णांक का उपयोग करेगा।

हालाँकि, हम शुक्र से 16-बिट को और अधिक नहीं देखते हैं, और जब 64-बिट लोकप्रिय लोगों को प्राप्त करने के लिए शुरू हुआ, तो यह पुराने सॉफ़्टवेयर के साथ संगत करने के लिए अधिक चिंतित थे और 32-बिट इतने लंबे समय तक रहा था कि अधिकांश कंपाइलरों के लिए एक int सिर्फ 32 बिट माना जाता है।


3

मैं Microsoft के StyleCop का उपयोग करने की सलाह दूंगा

यह FxCop की तरह है , लेकिन शैली से संबंधित मुद्दों के लिए। डिफ़ॉल्ट कॉन्फ़िगरेशन Microsoft की आंतरिक शैली मार्गदर्शिकाओं से मेल खाता है, लेकिन इसे आपकी परियोजना के लिए अनुकूलित किया जा सकता है।

इसकी आदत पड़ने में थोड़ा समय लग सकता है, लेकिन यह आपके कोड को निश्चित रूप से अच्छा बनाता है।

आप उल्लंघन के लिए स्वचालित रूप से जांच करने के लिए इसे अपनी निर्माण प्रक्रिया में शामिल कर सकते हैं।


मैं इस पर स्टाइलकॉप से ​​पूरी तरह असहमत हूं। हाँ यह अच्छा है, लेकिन मैं Int32 का उपयोग करना पसंद करता हूँ, क्यों? के रूप में दो नीचे वाले जैसे जवाब से बचने के लिए। लोग Int32 को भ्रमित करते हैं कि C
John Demetriou

2

intऔर Int32ऐसा ही है। intके लिए एक उपनाम है Int32


int एक उपनाम नहीं है, यह एक कीवर्ड है। अन्य उत्तर देखें।
13

int निश्चित रूप से भाषा के लिए एक कीवर्ड है, लेकिन इसे System.Int32 का उपनाम भी कहा जा सकता है। इसके अलावा, यह सोचने का एक और तरीका यह है कि आपके पास using int = System.Int32; सभी स्रोत कोड फ़ाइलों के लिए निर्देश है।
उइगर डोंडुरन

2

आपको परवाह नहीं करनी चाहिए। यदि आकार एक चिंता का विषय है तो मैं बाइट, शॉर्ट, इंट, का उपयोग करता हूं। एकमात्र कारण जो आप इंट 32 से अधिक का उपयोग करेंगे, यदि आपको 2147483647 से अधिक नंबर की आवश्यकता है या -2147483648 से कम है।

इसके अलावा, मुझे परवाह नहीं है, वहाँ अन्य मदों के साथ संबंधित होने के लिए बहुत सारे हैं।


मैं जोड़ता हूं कि आप System.Int64 के बजाय "लंबे" कीवर्ड का उपयोग कर सकते हैं
कीथ

22
आपने प्रश्न को गलत समझा। ओपी पूछ रहा है कि क्या घोषणाओं के बीच अंतर है "int i" और "Int32 i"।
रावेन

2

इससे अभ्यास में कोई फर्क नहीं पड़ता है और समय के साथ आप अपने स्वयं के सम्मेलन को अपनाएंगे। मैं एक प्रकार निर्दिष्ट करते समय कीवर्ड का उपयोग करता हूं, और स्थिर तरीकों का उपयोग करते समय वर्ग संस्करण और:

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


1

मैं इस घटना में int का उपयोग करता हूं कि Microsoft पूर्णांक के लिए डिफ़ॉल्ट कार्यान्वयन को कुछ नए fangled संस्करण में बदल देता है (चलो इसे Int32b कहते हैं)।

Microsoft तब int32b में int alias को बदल सकता है, और मुझे उनके नए (और उम्मीद में सुधार) पूर्णांक कार्यान्वयन का लाभ उठाने के लिए अपने किसी भी कोड को बदलने की आवश्यकता नहीं है।

वही किसी भी प्रकार के कीवर्ड के लिए जाता है।


0

आपको अधिकांश प्रोग्रामिंग भाषाओं में परवाह नहीं करनी चाहिए, जब तक कि आपको बहुत विशिष्ट गणितीय कार्यों को लिखने की आवश्यकता न हो, या एक विशिष्ट वास्तुकला के लिए अनुकूलित कोड ... बस यह सुनिश्चित करें कि प्रकार का आकार आपके लिए पर्याप्त है (यदि आप किसी इंट से अधिक कुछ का उपयोग करें) पता आप उदाहरण के लिए 32 से अधिक बिट की आवश्यकता होगी)


0

इससे कोई फर्क नहीं पड़ता। int भाषा का कीवर्ड है और Int32 इसका वास्तविक सिस्टम प्रकार है।

संबंधित प्रश्न के लिए यहां मेरा उत्तर भी देखें ।


0

Int या Int32 का उपयोग वही Int हैं जो पाठक के लिए कोड को सरल बनाने के लिए सिर्फ चीनी हैं।

अशक्त संस्करण इंट का उपयोग करें? या Int32? जब आप रिक्त वाले फ़ील्ड पर डेटाबेस के साथ काम करते हैं। जो आपको बहुत सारे रनटाइम मुद्दों से बचाएगा।


0

कुछ कंपाइलरों के अलग-अलग प्लेटफ़ॉर्म पर अलग-अलग आकार होते हैं (C # विशिष्ट नहीं)

कुछ कोडिंग मानकों (MISRA C) के लिए आवश्यक है कि उपयोग किए जाने वाले सभी प्रकार का आकार निर्दिष्ट हो (यानी Int32 और int नहीं)।

विभिन्न प्रकार के चरों के लिए उपसर्गों को निर्दिष्ट करना भी अच्छा है (जैसे 8 बिट बाइट के लिए b, 16 बिट शब्द के लिए w, और 32 बिट लंबे शब्द के लिए l => Int32 lMyVariable)

आपको ध्यान रखना चाहिए क्योंकि यह आपके कोड को अधिक पोर्टेबल और अधिक रखरखाव योग्य बनाता है।

पोर्टेबल C # पर लागू नहीं हो सकता है यदि आप हमेशा C # का उपयोग करने जा रहे हैं और C # विनिर्देशन इस संबंध में कभी नहीं बदलेगा।

बनाए रखने योग्य ihmo हमेशा लागू होगा, क्योंकि आपके कोड को बनाए रखने वाले व्यक्ति को इस विशेष सी # विनिर्देश के बारे में पता नहीं हो सकता है, और एक बग याद आती है कि अंतर कभी-कभी 2147483647 से अधिक हो जाता है।

एक साधारण फॉर-लूप में, जो वर्ष के महीनों के उदाहरणों के लिए गिना जाता है, आप परवाह नहीं करेंगे, लेकिन जब आप चर को एक ऐसे संदर्भ में उपयोग करते हैं जहां यह संभवतः owerflow हो सकता है, तो आपको ध्यान रखना चाहिए।

आपको इस बात पर भी ध्यान देना चाहिए कि क्या आप इस पर बिट-वार ऑपरेशन करने जा रहे हैं।


इससे .Net में कोई अंतर नहीं पड़ता - int हमेशा Int32 होता है और हमेशा Int64 होता है
Keith

It is also good to specify prefixes for different type variablesहंगेरियन नोटेशन आजकल बड़े पैमाने पर पदावनत है और अधिकांश कोडिंग शैली इसके उपयोग को हतोत्साहित करती हैं। सॉफ्टवेयर कंपनियों के आंतरिक सम्मेलनों में भी अक्सर यह मनाही होती है
phuclv

0

Int32प्रकार का उपयोग करने के लिए एक नामस्थान संदर्भ की आवश्यकता होती है System, या पूरी तरह से अर्हक ( System.Int32)। मैं इसकी ओर रुख intकरता हूं , क्योंकि इसमें नाम स्थान के आयात की आवश्यकता नहीं है, इसलिए कुछ मामलों में नाम स्थान टकराव की संभावना को कम करता है। जब IL में संकलित किया जाता है, तो दोनों के बीच कोई अंतर नहीं होता है।


0

विजुअल स्टूडियो 2012 में तत्काल विंडो के अनुसार Int32 int है, Int64 लंबा है। यहाँ उत्पादन है:

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

Int16 पर भी विचार करें। यदि आपको अपने एप्लिकेशन में मेमोरी में एक इंटेगर को स्टोर करने की आवश्यकता है और आप उपयोग की जाने वाली मेमोरी के बारे में चिंतित हैं, तो आप Int16 के साथ जा सकते हैं क्योंकि यह कम मेमरी का उपयोग करता है और इसमें Int32 की तुलना में एक छोटा मिनट / अधिकतम रेंज है (जो कि int है) ।)


0

कुछ समय पहले मैं Microsoft के साथ एक प्रोजेक्ट पर काम कर रहा था जब हमारे पास Microsoft .NET CLR उत्पाद टीम के किसी व्यक्ति की यात्रा थी। इस व्यक्ति ने उदाहरण दिए और जब उसने अपने चर को परिभाषित किया तो उसने "Int32" बनाम "int" और "स्ट्रिंग" बनाम "स्ट्रिंग" का उपयोग किया।

मैंने इस शैली को Microsoft के अन्य उदाहरण कोड में देखकर याद किया था। इसलिए, मैंने कुछ शोध किया और पाया कि हर कोई कहता है कि वाक्यविन्यास रंग को छोड़कर "Int32" और "int" में कोई अंतर नहीं है। वास्तव में, मुझे आपके कोड को अधिक पठनीय बनाने के लिए "Int32" का उपयोग करने का सुझाव देने वाली बहुत सी सामग्री मिली। इसलिए, मैंने शैली को अपनाया।

दूसरे दिन मुझे एक अंतर मिला! संकलक आपको "Int32" का उपयोग करके एनम टाइप करने की अनुमति नहीं देता है, लेकिन यह तब होता है जब आप "int" का उपयोग करते हैं। मुझसे मत पूछो क्योंकि मुझे अभी तक पता नहीं है।

उदाहरण:

public  enum MyEnum : Int32
{
    AEnum = 0
}

यह काम।

public enum MyEnum : int
{
    AEnum = 0
}

से लिया गया: Int32 अंकन बनाम इंट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.