2012-11-21 15 views
8

मैं एक सम्मेलन का पालन करता हूं कि मैं कक्षाओं में किसी भी प्रिंट स्टेटमेंट का उपयोग नहीं करूंगा, लेकिन मैंने एक निर्माता में पैरामीटर सत्यापन किया है। कृपया मुझे बताएं कि उस सत्यापन को कैसे वापस किया जाए जो मैंने मुख्य समारोह में कन्स्ट्रक्टर में किया है।सी # में कन्स्ट्रक्टर का उपयोग कर मूल्य कैसे वापस करें?

उत्तर

26

निर्माता कोई मान है - प्रकार निर्माण किया जा रहा ...

एक निर्माता मूल्य के किसी भी अन्य प्रकार वापस जाने के लिए नहीं होता।

जब आप किसी निर्माता में मान्य होते हैं, तो आपको अपवाद फेंकना चाहिए यदि पास किए गए मान अमान्य हैं।

public class MyType 
{ 
    public MyType(int toValidate) 
    { 
     if (toValidate < 0) 
     { 
     throw new ArgumentException("toValidate should be positive!"); 
     } 
    } 
} 
+0

ओह, मेरी इच्छा है कि मैं हजार बार वोट दे सकता हूं। यह कैंसर की तरह फैल रहा है कि अनुमत सत्यापन शैली के साथ इतना थकाऊ है। – jgauffin

+0

@jgauffin - आपका क्या मतलब है? – Oded

+0

उदाहरण के लिए अपने डोमेन/व्यावसायिक मॉडल पर DataAnnotation विशेषताओं का उपयोग करना। यानी वस्तुओं को अमान्य जानकारी रखने और कॉलिंग कोड पर भरोसा करने की अनुमति देने के लिए यह सुनिश्चित करने के लिए कि सब कुछ मान्य और सही है। आप जानते हैं .. encapsulation का उल्लंघन। – jgauffin

4

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

public class YourClass 
{ 
    public YourClass(ref string msg) 
    { 
     msg = "your message"; 
    } 

}  

public void CallingMethod() 
{ 
    string msg = string.Empty; 
    YourClass c = new YourClass(ref msg);  
} 
+5

कि आप _can_ का मतलब _should_ नहीं है। – Oded

0

जब एक निर्माता को एक अवैध तर्क प्राप्त होता है, तो अपवाद फेंकना आम बात है। फिर आप इस अपवाद को पकड़ सकते हैं और इसमें मौजूद डेटा को पार्स कर सकते हैं।

try 
{ 
    int input = -1; 
    var myClass = new MyClass(input); 
} 
catch (ArgumentException ex) 
{ 
    // Validation failed. 
} 
0

एक कन्स्ट्रक्टर तत्काल प्रकार को लौटाता है, और यदि आवश्यक हो, तो अपवाद फेंक सकता है। शायद एक बेहतर समाधान कोशिश अपने वर्ग का एक उदाहरण बनाने के लिए एक स्थिर विधि जोड़ने के लिए होगा:

public static bool TryCreatingMyClass(out MyClass result, out string message) 
{ 
    // Set the value of result and message, return true if success, false if failure 
} 
1

बाहर पैरामीटर के साथ एक निर्माता हैं और एक ही के माध्यम से अपनी वापसी मूल्य भेजें।

public class ClassA 
{ 
    public ClassA(out bool success) 
    { 
     success = true; 
    } 
} 
+0

यदि आपकी बात आती है तो आपकी कक्षा बहुत नाजुक है। –

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