2010-11-12 22 views
5

TranslateAllCoords स्थिर समारोह पर विचार करेंमूल्य प्रकार के अस्थिरता

int x=0, y=0, z=0; 
... 
CoordinateTransformation.TranslateAllCoords(ref x, ref y, ref z, 5); 
... 

लेकिन, TranslateAllCoords फोन करके आप प्रभाव को संशोधित मूल्य प्रकार में हैं (यानी , पूर्णांक coords) और आम तौर पर मूल्य प्रकार अपरिवर्तनीय होना चाहिए। क्या कुछ नियम यहां टूटे हैं या क्या यह एक पूरी तरह से वैध निर्माण है जो "मूल्य प्रकारों को अपरिवर्तनीय" बना सकता है, केवल मूल्य प्रकारों में निर्मित करके संशोधित किया जा सकता है?

उत्तर

17

मूल्य अपरिवर्तनीय हैं। वेरिएबल्स जिनमें मान प्रकार होते हैं वे उत्परिवर्तनीय होते हैं। चर बदलते हैं, यही कारण है कि उन्हें "चर" कहा जाता है।

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

struct Point { public int X; public int Y; public int Z; } 
... 
Point p = new Point(); 
p.X = 123; 

आप तो क्या कह रहे हैं कि "चर पी का ही हिस्सा उत्परिवर्तित"। यह भ्रमित है। परिवर्तनीय पी को तार्किक रूप से एक बिंदु का प्रतिनिधित्व करना चाहिए, और एक बिंदु एक मान है। यदि आप पी को बदलना चाहते हैं, तो पूरी तरह सेद्वारा पर एक नया बिंदु असाइन करने के लिए तर्कसंगत रूप से भिन्न होता है। एक बिंदु को दूसरे में मत बदलें।

लेकिन फिर भी अगर हम बात अपरिवर्तनीय बनाया:

struct Point { public int X { get; private set; } ... etc } 

तो उस प्रकार के चर अभी भी अलग-अलग हो सकते हैं!

Point p = new Point(123, 456, 789); 
p = new Point(100, 200, 300); 

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

static Point Translate(Point p, int offset) 
{ 
    return new Point(p.X + offset, p.Y + offset, p.Z + offset); 
} 
... 
Point p = new Point(100, 200, 300); 
p = Translate(p, 5); 

देखें, फिर से, पी mutates, लेकिन यह सब एक ही बार में एक समय में छोटे टुकड़े में नहीं mutates,:

अपरिवर्तनीय मान प्रकार आप तो अधिक समझदारी से आपके अनुवाद कर सकते हैं के साथ

+0

स्पष्ट स्पष्टीकरण के लिए धन्यवाद! –

1

कोई नियम नहीं टूटा हुआ है। आप बस एक नया पूर्णांक मान बना रहे हैं और उन्हें युक्त चर को पुन: असाइन कर रहे हैं।

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