.net - स्नातक होने के बाद लाइब्रेरियन पाठ्यक्रम




.NET गार्ड कक्षा लाइब्रेरी? (4)

मैं एक लाइब्रेरी या स्रोत कोड की खोज कर रहा हूं जो कि रिक्त आर्गुमेंट्स की जाँच करने के लिए गार्ड विधियों को प्रदान करता है। जाहिर है यह निर्माण करने के लिए आसान नहीं है, लेकिन मैं सोच रहा हूं कि वहाँ पहले से ही .net के लिए कोई भी बाहर है। एक बुनियादी Google खोज ने बहुत कुछ प्रकट नहीं किया।


आप उपयोग कर सकते हैं कई तरीके हैं

मेरा पसंदीदा एपेट ओरिएंटेड प्रोग्रामिंग का उपयोग कर रहा है PostSharp देखें

आप कल्पना # पर एक नज़र भी देख सकते हैं, सी # के लिए एक एक्सटेंशन

4.0 में, आपके पास एक पूर्ण विशेषताओं वाला अनुबंध लाइब्रेरी होगा।

अंत में, मेरा एक दल बहुत ही उपयोगी गार्ड पुस्तकालय के साथ आया है: http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48


माइक्रोसॉफ्ट के कोड संविदाओं को देखते हुए मैंने .NET 4.0 के साथ आने की कोशिश की थी, यदि संभव हो तो अधिकतर संगत है, और यदि नहीं, तो इसे खुद लिखिए। इस तरह जब आप .NET 4.0 (अंततः) में अपग्रेड करते हैं तो माइग्रेशन आसान हो जाएगा।


मैंने हाल ही में गार्ड क्लास के बारे में एक पोस्ट लिखा था (या तो कोई जानकारी नहीं मिली): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

मैंने एक संबंधित गार्ड श्रेणी के कार्यान्वयन भी प्रकाशित किया है (इस कोड का उपयोग करने के लिए स्वतंत्र है, या इसे अपनी आवश्यकताओं के अनुसार समायोजित करने के लिए): ajdotnet.wordpress.com/guard-class/

.NET 4.0 (युक्ति # के उत्तराधिकारी) में संरक्षक वर्गों और संहिता अनुबंध के बीच संबंधों के संबंध में, निम्नलिखित पोस्ट पर एक नज़र डालें: www.leading-gege-dev.de/?p=438

(विखंडित लिंक के लिए खेद है, साइट को केवल एक लिंक की अनुमति है ...)

HIH, AJ.NET


कटिंगएज.कंडिशन हैं । पृष्ठ से उपयोग का उदाहरण:

public ICollection GetData(Nullable<int> id, string xml, ICollection col)
{
    // Check all preconditions:
    id.Requires("id")
        .IsNotNull()          // throws ArgumentNullException on failure
        .IsInRange(1, 999)    // ArgumentOutOfRangeException on failure
        .IsNotEqualTo(128);   // throws ArgumentException on failure

    xml.Requires("xml")
        .StartsWith("<data>") // throws ArgumentException on failure
        .EndsWith("</data>"); // throws ArgumentException on failure

    col.Requires("col")
        .IsNotNull()          // throws ArgumentNullException on failure
        .IsEmpty();           // throws ArgumentException on failure

    // Do some work

    // Example: Call a method that should not return null
    object result = BuildResults(xml, col);

    // Check all postconditions:
    result.Ensures("result")
        .IsOfType(typeof(ICollection)); // throws PostconditionException on failure

    return (ICollection)result;
}

एक और अच्छा दृष्टिकोण, जिसे एक पुस्तकालय में पैक नहीं किया गया है, लेकिन आसानी से, Paint.Net ब्लॉग पर हो सकता है:

public static void Copy<T>(T[] dst, long dstOffset, T[] src, long srcOffset, long length)
{
    Validate.Begin()
            .IsNotNull(dst, "dst")
            .IsNotNull(src, "src")
            .Check()
            .IsPositive(length)
            .IsIndexInRange(dst, dstOffset, "dstOffset")
            .IsIndexInRange(dst, dstOffset + length, "dstOffset + length")
            .IsIndexInRange(src, srcOffset, "srcOffset")
            .IsIndexInRange(src, srcOffset + length, "srcOffset + length")
            .Check();

    for (int di = dstOffset; di < dstOffset + length; ++di)
        dst[di] = src[di - dstOffset + srcOffset];
}

मैं इसे अपने प्रोजेक्ट में उपयोग करता हूं और आप वहां से कोड उधार ले सकते हैं।





code-contracts