2016-04-08 4 views
19

मैं किसी ऑब्जेक्ट प्रारंभिक पैटर्न के साथ कुछ कोड की समीक्षा कर रहा हूं जिसे मैं पहचान नहीं पा रहा हूं - क्या कोई मुझे बता सकता है कि इस पैटर्न को क्या कहा जाता है (और उपयोग पर दस्तावेज़ कहां खोजें)?इस ऑब्जेक्ट प्रारंभकर्ता पैटर्न को क्या कहा जाता है?

obj.myType = (myVar = new MyType()); 

यदि यह महत्वपूर्ण है, तो विशिष्ट उपयोग-मामले निम्नानुसार है;

protected MyType myVar; 
protected readonly MyComplexType myComplexType; 

protected void Page_Init(object sender, EventArgs e)) { 
    ... 
    myComplexType.myType = (myVar = new MyType()); 
    ... 
} 
+1

एक इस बात का उदाहरण आलसी क्षेत्र हैं: 'हो {fld लौट ?? (एफएलडी = नया सी()); } '। एक बार जब आप इसका इस्तेमाल कर लेंगे तो यह एक अच्छा, छोटा शॉर्टकट है। – usr

+2

मैं इस पैटर्न को "खराब कोड" – Mick

उत्तर

19

यह सिर्फ दो बार एक ही मूल्य निर्धारित कर रहा है - myVar के लिए एक बार और एक बार myComplexType.myType करने के लिए।

यह

var tmp = new MyType(); 
myVar = tmp; 
myComplexType.myType = tmp; 

के बराबर है (कुछ जटिल मामलों में प्रकार रूपांतरण वहाँ चल रहा है, लेकिन मैं वहाँ इस विशेष मामले में किसी भी होने की उम्मीद नहीं है हो सकता है।)

आपके पास निश्चित रूप से अतिरिक्त स्थानीय चर का उपयोग करने की आवश्यकता नहीं है। इस कोड को "कुछ हद तक बराबर" है, लेकिन myVar से शामिल पढ़ने इसलिए बिल्कुल बराबर है, लेकिन अधिक होने के लिए आप क्या उपयोग करेंगे संभावना नहीं है:

myVar = new MyType(); 
myComplexType.myType = myVar; 

इस के लिए कोई विशेष नाम नहीं है, और यह अपेक्षाकृत है सबसे आम उदाहरण होने के साथ, एक अभिव्यक्ति में कहीं एक काम का परिणाम का उपयोग करने के दुर्लभ:

string line; 
while ((line = reader.ReadLine()) != null) 
{ 
    ... 
} 
+1

कहूंगा तो मुझे लगता है कि इसका उपयोग करने का कोई कारण नहीं है? – smoksnes

+6

@smoksnes: वैसे यह दो चरों के समान मूल्य निर्दिष्ट करने का एक छोटा तरीका है ... चाहे आप इसे लंबे समय तक पसंद करते हैं या नहीं, एक अलग मामला है। –

+1

मैं पठनीयता का पक्ष लेता हूं इसलिए इस तरह के दुर्लभ पैटर्न के लिए मुझे @smoksnes –

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