मैं निम्नलिखित कोड है:पैरामीटर कार्रवाई <T1, T2, T3> T3 वैकल्पिक हो सकता है
वैकल्पिक param3 पैरामीटर काpublic static MyMethod()
{
...Do something
ProtectedMethod(param1, param2);
...Do something
}
protected static void ProtectedMethod(IEnumerable<string> param1, string param2, int param3 = 1)
{
... Do something
}
लें नोटिस।
अब कुछ कारणों से मुझे MyMethod विधि के कोड को अपनी कक्षा में निकालने की आवश्यकता है, लेकिन मैं इसके साथ विरासत में आने वाले सभी वर्गों के कारण संरक्षित विधि को निकाला नहीं जा सकता और मुझे परिवर्तनों को रखने की आवश्यकता है छोटा और अलग तो मैंने सोचा कि मेरे पास एक एक्शन <> संरक्षित विधि के समान हस्ताक्षर के साथ नई कक्षा में प्रतिनिधि हो सकता है।
protected readonly Action<IEnumerable<string>, string, int> m_ProtectedMethod;
निकाले कोड यह पसंद नहीं करता क्योंकि यह कहते विधि केवल दो मापदंडों के साथ लागू किया जा रहा है:
समस्या यह है कि अगर मैं इस तरह प्रतिनिधि घोषित है।
और अगर मैं तो जैसे प्रतिनिधि घोषित:
protected readonly Action<IEnumerable<string>, string> m_ProtectedMethod;
जब मैं नया वर्ग के लिए एक पैरामीटर के रूप में भेजें यह यह पसंद नहीं करता क्योंकि या तो विधि तीन पैरामीटर नहीं दो होने के रूप में परिभाषित किया गया है।
अभी तक इसे हल करने का एकमात्र तरीका वैकल्पिक पैरामीटर को खत्म करने के लिए ProtectedMethod का अधिभारित संस्करण बनाना है।
क्या यह एकमात्र विकल्प है या ऐसा करने का दूसरा तरीका है क्योंकि अब पसंदीदा विकल्प ओवरलोडेड विधियों के बजाय वैकल्पिक पैरामीटर होना है?
सभी संबंधित नहीं हैं, लेकिन कुछ ऐसा दिखता है: http://stackoverflow.com/questions/707780/is-there-a-reasonable-approach-to-default-type-parameters-in-c-sharp- जेनेरिक – nawfal