2012-02-17 10 views
22

मुझे पता है कि स्ट्रिंग्स में चर की लंबाई है, इसलिए उन्हें संग्रहीत करने के लिए मेमोरी में परिवर्तनीय स्थान की आवश्यकता है। जब हम struct में स्ट्रिंग आइटम को परिभाषित करते हैं, तो struct का आकार तब लंबाई में परिवर्तनीय होगा।सी # स्ट्रक्चर में स्ट्रिंग्स का प्रबंधन

पुरानी भाषाओं ने निश्चित-लंबाई तारों का उपयोग करके इसे प्रबंधित किया। हालांकि, सी # में निश्चित-लंबाई तारों को परिभाषित करने का कोई तरीका नहीं है, और सी # struct में सामान्य स्ट्रिंग का प्रबंधन करता है।

यह अधिक अजीब हो जाता है जब हम struct एस, या केवल तारों की एक सरणी परिभाषित करते हैं। एक स्ट्रिंग की लंबाई में किसी भी बदलाव (कमी/वृद्धि) के परिणामस्वरूप, सभी आगे struct एस को स्थानांतरित किया जाना चाहिए।

सी # कैसे structs में परिवर्तनीय-लंबाई तारों को संभालता है?

+2

सी # सी नहीं है - आप मानते हैं कि स्मृति दोनों में समान तरीके से प्रबंधित की जाती है। – Oded

+0

हाँ ... मेरी गलती। –

उत्तर

37

स्ट्रिंग (जो मान प्रकार नहीं है) का संदर्भ संरचना में संग्रहीत है, इसलिए संरचना का आकार कभी नहीं बदलता है।

+1

+1 काफी संक्षिप्त! – Candide

+0

क्या आपका मतलब "एक मूल्य प्रकार है"? – Krythic

+0

नहीं, एक स्ट्रिंग एक [मान प्रकार] नहीं है (https://msdn.microsoft.com/en-us/library/s1ax56ch.aspx)। – jjlin

2

सी # स्ट्रक्चर में तारों का प्रबंधन करता है जिस तरह से यह सामान्य रूप से तारों का प्रबंधन करता है। देखें:

5

+1 प्रश्न के संक्षिप्त और सटीक उत्तर के लिए jjlin करने के लिए, लेकिन एक और अधिक सामान्य जवाब उपयोगी हो सकता है:

एक क्षेत्र या किसी की परिवर्तनशील घोषणा संदर्भ प्रकार संदर्भ के लिए एक भंडारण स्थान का प्रतिनिधित्व करता है। यह संरचना के क्षेत्रों के लिए भी सच है।

(एक struct में संदर्भ प्रकार क्षेत्रों सहित उस प्रकार एक "प्रबंधित प्रकार" है, जो असुरक्षित कोड में महत्वपूर्ण है बनाता है; यदि आप किसी प्रबंधित प्रकार के लिए सूचक की घोषणा नहीं कर सकते हैं।)

9

मेरी पहली करने के लिए प्रश्न आप होंगे, क्या आपकी आवश्यकताओं को निर्देश दिया गया है कि एक निश्चित लंबाई स्ट्रिंग की आवश्यकता है? यदि ऐसा है तो एक char [] वास्तव में वह हो सकता है जिसका आप उपयोग करना चाहते हैं।

.NET ढांचा सीधे सी-स्टाइल स्ट्रिंग्स (चार सरणी) का उपयोग नहीं करता है, बल्कि इसके बजाय अपरिवर्तनीय संदर्भों से स्ट्रिंग का प्रतिनिधित्व करता है। जब एक स्ट्रिंग को संशोधित या संशोधित किया जाता है, तो आप वास्तव में स्मृति में एक नई स्ट्रिंग ऑब्जेक्ट बना रहे हैं। यह मंच की वांछित विशेषता है, लेकिन जिस पर जादुई रूप से आकार बदलने वाले तारों की अपेक्षा के रूप में विचार की आवश्यकता होती है, वह कुछ अवांछित दुष्प्रभावों का कारण बन सकती है।

अपने प्रश्न पर वापस जाएं। "सी # स्ट्रक्चर में तारों का प्रबंधन कैसे करता है?")

1:

मैं क्या देख से इस सवाल का व्याख्या करने के लिए दो तरीकों में से एक। मैं स्ट्रिंग्स वाले स्ट्रक्चर कैसे बना सकता हूं, और .NET Framework इस परिदृश्य में तारों का प्रबंधन कैसे करता है?

संक्षिप्त उत्तर: ध्यान रखें कि तार अपरिवर्तनीय प्रकार हैं। सामान्य रूप से अपनी संरचना बनाएं, और महसूस करें कि संरचना में केवल स्ट्रिंग का संदर्भ होता है, न कि संरचना का जादुई रूप से आकार देने वाला खंड जो आपके अस्थिर स्ट्रिंग को शामिल करता है।

2)। .NET Framework स्ट्रिंग का आकार बदल सकता है यदि वे structs द्वारा प्रतिनिधित्व किए गए मान प्रकार हैं।

संक्षिप्त उत्तर, यह नहीं है। यह कैसे नहीं है।एनईटी तारों के साथ काम करता है, ऊपर देखें।

+1

धन्यवाद फिरोसो। नहीं, मैं तारों से खुश हूं। मैं स्ट्रिंग्स और तारों के सरणी पर संचालन की महान समय जटिलता के बारे में चिंतित था। अब मैं चाल जानता हूं: "स्ट्रिंग का संदर्भ"। –

+0

यदि आप मजबूत हेरफेर और उत्परिवर्तन की दक्षता के बारे में चिंतित हैं, तो स्ट्रिंगबिल्डर वर्ग का उपयोग करने पर विचार करें। – Firoso

-5

संरचना ढेर पर स्ट्रैक और स्ट्रिंग स्टोर में सहेजती है।

जैसे ही प्राचीन प्रकार के ढेर पर बचाता है और संदर्भ प्रकार ढेर पर बचाता है।

संबंधित मुद्दे