2009-10-31 10 views
23

this question पर देखते हुए और इसके जवाब मैंने सोचा कि System.Console के लिए एक विस्तार विधि लिखना एक अच्छा विचार होगा जिसमें वांछित कार्यक्षमता शामिल है।क्या कंसोल के लिए एक्सटेंशन विधियां लिखना संभव है?

हालांकि, जब मैं इसे करने की कोशिश की, मैं इस संकलक त्रुटि

System.Console 'मिल गया: स्थिर प्रकार के लिए इस्तेमाल नहीं किया जा सकता है के रूप में मानकों

कोड यह रहा:

using System; 
using System.Runtime.CompilerServices; 

namespace ConsoleApplication1 
{ 
    public static class ConsoleExtensions 
    { 
     [Extension] 
     public static string TestMethod(this Console console, string testValue) 
     { 
      return testValue; 
     } 

    } 
} 

क्या स्थिर प्रकारों के लिए विस्तार विधियां बनाने का कोई और तरीका है? या यह सिर्फ संभव नहीं है?

उत्तर

20

दुर्भाग्यवश यह संभव नहीं है। Static extension methods

देखें कुछ लोगों को यह सुझाव दिया है: http://madprops.org/blog/static-extension-methods/

... लेकिन यह नेट 4 में कभी नहीं किया गया था जाहिरा तौर पर विस्तार गुण यह बनाने के लिए किसी न किसी प्रकार मिल गया है, लेकिन फिर छोड़ दिया गया था।

https://blogs.msdn.com/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

15

यह संभव के रूप में मैट के जवाब में उल्लेख नहीं है,।

एक कामकाज के रूप में आप एक स्थिर वर्ग बना सकते हैं जो कंसोल को वांछित कार्यक्षमता जोड़ देगा।

public static class ConsoleEx 
{ 
    public static void WriteLineRed(String message) 
    { 
     var oldColor = Console.ForegroundColor; 
     Console.ForegroundColor = ConsoleColor.Red; 
     Console.WriteLine(message); 
     Console.ForegroundColor = oldColor; 
    } 
} 

यह शालीनता से अच्छी तरह से आदर्श नहीं है, के रूप में जोड़ना है कि छोटी "पूर्व" है, लेकिन कोड के साथ बहती है कि यदि कोई (ehm) सांत्वना है:

ConsoleEx.WriteLineRed("[ERROR]") 
संबंधित मुद्दे