Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में नल ऑब्जेक्ट पैटर्न कैसे लागू करें

नल ऑब्जेक्ट पैटर्न हमें हर जगह नल चेक से बचकर साफ कोड लिखने में मदद करता है। नल ऑब्जेक्ट पैटर्न का उपयोग करके, कॉलर्स को इस बात की परवाह नहीं करनी पड़ती कि उनके पास नल ऑब्जेक्ट है या असली ऑब्जेक्ट। हर परिदृश्य में नल ऑब्जेक्ट पैटर्न लागू करना संभव नहीं है। कभी-कभी, नल रेफरेंस लौटाना और कुछ नल चेक करना संभावित होता है।

उदाहरण: शेप फैक्टरी

using System;

static class Program
{
    static void Main(string[] args)
    {
        IShape shape1 = ShapeFactory.GetShape("square");
        shape1.Draw(); // काम करता है

        IShape shape2 = ShapeFactory.GetShape("triangle"); // अज्ञात
        shape2.Draw(); // कुछ नहीं करता, कोई एक्सेप्शन नहीं!

        IShape shape3 = ShapeFactory.GetShape(null);
        shape3.Draw(); // सुरक्षित

        Console.ReadLine();
    }
}

public interface IShape
{
    void Draw();
}

public class Square : IShape
{
    public void Draw() { Console.WriteLine("Drawing Square"); }
}

public class Rectangle : IShape
{
    public void Draw() { Console.WriteLine("Drawing Rectangle"); }
}

// नल ऑब्जेक्ट - सिंगलटन पैटर्न
public class NullShape : IShape
{
    private static readonly Lazy<NullShape> _instance = 
        new Lazy<NullShape>(() => new NullShape());

    private NullShape() { }

    public static NullShape Instance => _instance.Value;

    public void Draw() { } // कुछ नहीं करता - सुरक्षित नो-ऑप
}

// फैक्टरी
public static class ShapeFactory
{
    public static IShape GetShape(string shapeName)
    {
        if (string.IsNullOrEmpty(shapeName))
            return NullShape.Instance;

        return shapeName.ToLower() switch
        {
            "square" => new Square(),
            "rectangle" => new Rectangle(),
            _ => NullShape.Instance // अज्ञात प्रकार के लिए नल ऑब्जेक्ट लौटाएं
        };
    }
}

नल ऑब्जेक्ट पैटर्न के लाभ

  • नल चेक समाप्त: कॉलर कोड में if (obj != null) की आवश्यकता नहीं
  • नल रेफरेंस एक्सेप्शन रोकता है: सुरक्षित डिफ़ॉल्ट व्यवहार
  • पॉलिमॉर्फिज़्म: नल ऑब्जेक्ट वास्तविक ऑब्जेक्ट की तरह व्यवहार करता है
  • साफ कोड: कम सशर्त तर्क
  • डिफ़ॉल्ट व्यवहार: सार्थक डिफ़ॉल्ट प्रदान कर सकता है (जैसे खाली सूची, शून्य मान)

कब उपयोग करें

  • जब नल एक वैध, अपेक्षित स्थिति है
  • जब डिफ़ॉल्ट "कुछ न करें" व्यवहार समझ में आता है
  • जब नल चेक कोड को अव्यवस्थित करते हैं
  • रणनीति पैटर्न में डिफ़ॉल्ट रणनीति के रूप में

कब उपयोग न करें

  • जब नल एक त्रुटि स्थिति को इंगित करता है जिसे संभाला जाना चाहिए
  • जब नल और "वास्तविक" ऑब्जेक्ट के बीच अंतर महत्वपूर्ण है
  • जब नल ऑब्जेक्ट सूक्ष्म बग छुपा सकता है
  • प्रदर्शन-महत्वपूर्ण पथ जहां अतिरिक्त ऑब्जेक्ट आवंटन मायने रखता है

आधुनिक C# विकल्प

// नल-सशर्त ऑपरेटर (C# 6+)
obj?.DoSomething();

// नल-कोएलिसिंग ऑपरेटर (C# 7+)
var result = obj?.Value ?? defaultValue;

// नल-सहनीय रेफरेंस प्रकार (C# 8+)
#nullable enable
public string? Name { get; set; } // स्पष्ट रूप से नल योग्य
#nullable restore

नल ऑब्जेक्ट बनाम नल चेक

पहलूनल चेकनल ऑब्जेक्ट
कोड अव्यवस्थाउच्चकम
सुरक्षामैन्युअलस्वचालित
प्रदर्शनथोड़ा बेहतरअतिरिक्त ऑब्जेक्ट
व्यवहारकॉलर-निर्भरएनकैप्सुलेटेड
  1. Android TextInputLayout कैसे लागू करें Android TextInputLayout कैसे लागू करें

    Android TextInputLayout लागू करना: पूर्ण गाइड उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में TextInputLayout क्या है। TextInputLayout, LinearLayout द्वारा विस्तारित है। यह एडिट टेक्स्ट के लिए एक रैपर के रूप में कार्य करता है और एडिट टेक्स्ट के लिए फ्लोटिंग हिंट एनिमेशन दिखाता है। यह उद

  1. Android Pull-to-Refresh कैसे लागू करें? Android Pull-to-Refresh कैसे लागू करें?

    Android Pull-to-Refresh (Swipe-to-Refresh) लागू करना उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में Pull to Refresh लेआउट क्या है। हम Android में Pull to Refresh को Swipe-to-Refresh कह सकते हैं। जब आप स्क्रीन को ऊपर से नीचे की ओर स्वाइप करते हैं तो यह setOnRefreshListener के आधार पर कुछ

  1. पायथन में पैटर्न कैसे प्रिंट करें पायथन में पैटर्न कैसे प्रिंट करें

    पायथन में पैटर्न्स को नेस्टेड फॉर लूप्स का उपयोग करके प्रिंट किया जा सकता है। बाहरी लूप का उपयोग पंक्तियों की संख्या के माध्यम से इटरेट करने के लिए किया जाता है जबकि आंतरिक लूप का उपयोग स्तंभों की संख्या को संभालने के लिए किया जाता है। प्रिंट स्टेटमेंट को आवश्यकतानुसार विभिन्न पैटर्न बनाने के लिए मॉ