मैं एक कार्य विशिष्ट .NET Plattform के साथ काम कर रहा हूं, जो precompiled है और ओपनसोर्स नहीं है। कुछ कार्यों के लिए मुझे इस वर्ग को विस्तारित करने की आवश्यकता है, लेकिन इससे विरासत में नहीं। मैं बस एक विधि जोड़ना चाहता हूँ।मैं टाइप पैरामीटर पर बाधाओं के साथ सामान्य प्रकार के लिए एक एक्सटेंशन विधि कैसे लिखूं?
पहले तो मैं तुम्हें एक dummycode मौजूदा वर्ग दिखाना चाहते हैं:
public static class MatrixExtension {
public static T getCalcResult<T>(this Matrix<T> mat) {
T result = 0;
...
return result;
}
}
मैं कई गूगल से इस वाक्य रचना है:
public class Matrix<T> where T : new() {
...
public T values[,];
...
}
मैं निम्नलिखित तरीके से इस वर्ग का विस्तार करना चाहते लिंक इसलिए कोई विचार नहीं कि यह सही है या नहीं। संकलक मुझे कोई त्रुटि नहीं बताता है, लेकिन अंत में यह काम नहीं करता है। अंत में मैं इस फ़ंक्शन को निम्न तरीके से कॉल करना चाहता हूं:
Matrix<int> m = new Matrix<int>();
...
int aNumber = m.getCalcResult();
तो किसी को भी कोई विचार आया? आपके सहयोग के लिए धन्यवाद!
सादर Nem
तुम्हें क्या लगता है यह काम नहीं करता हो? क्या यह अपवाद फेंकता है? –
एक्सटेंशन विधि का उपयोग करने का यह सही तरीका है, लेकिन 'टी परिणाम = 0' के बजाय आपके पास' टी परिणाम = डिफ़ॉल्ट (टी) 'होना चाहिए क्योंकि टी प्रारंभ में 'int' तक सीमित नहीं है।इसके अलावा, आपको यह सुनिश्चित करने के लिए जांच करनी चाहिए कि आपके पास MatrixExtension क्लास को शामिल करने के लिए उपयोग कथन है। आप यह सुनिश्चित करने के लिए कि क्या यह काम कर रहा है, आप सीधे 'MatrixExtension.getCalcResult (m)' को कॉल करके जांच सकते हैं। –
कम से कम आईडीई मुझे इस तरह की विधि को कॉल करने के लिए मजबूर करता है: m.getCalcResult(); लेकिन जब मैं इस संकलन करने की कोशिश मैं एक अन्य त्रुटि मिलती है: > 'मैट्रिक्स ' 'getValue' के लिए एक परिभाषा और कोई विस्तार विधि 'getValue' प्रकार का एक पहला तर्क को स्वीकार करने 'मैट्रिक्स ' शामिल नहीं है हो सकता है मिला (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) विधि को कॉल करने के इस तरीके से कोई अर्थ नहीं है क्योंकि जेनेरिक पैरामीटर टी पहले ही असाइन किया गया है। –