2012-05-17 4 views
21

मैं निम्नलिखित इंटरफेस है कि एक कॉलबैक का उपयोग कर प्रकार टी के जेनेरिक पैरामीटर देता है ...सी # जेनिक्स: यदि टी रिटर्न प्रकार है, तो क्या यह शून्य भी हो सकता है? मैं इन इंटरफेस को एक साथ कैसे जोड़ सकता हूं?

public interface IDoWork<T> 
{ 
    T DoWork(); 
} 

लेकिन मैं यह भी निम्नलिखित इंटरफेस के रूप में अच्छी तरह से है, लेकिन यह एक कॉलबैक आह्वान नहीं करेगा क्योंकि इसमें शून्य रिटर्न दिया है ।

public interface IDoWork 
{ 
    void DoWork(); 
} 

क्या मैं इन दो इंटरफेस को जोड़ सकता हूं और अंतर निर्धारित करने के लिए रनटाइम तर्क का उपयोग कर सकता हूं? मैं उसे कैसे कर सकता हूँ?

+0

बहुत बुरा आप जावा भूमि में नहीं हैं, क्योंकि आप 'IDoWork ... जैसे कुछ करने में पूरी तरह से सक्षम होंगे। मुझे आश्चर्य है कि सी # ऐसी चीज नहीं पेश करता है। –

+1

@ क्रिसशैशवेल, ऐसा इसलिए है क्योंकि .NET जेनेरिक सीएलआर में बनाए जाते हैं, जबकि जावा में यह सिर्फ एक कंपाइलर चाल है (जेवीएम जेनेरिक के बारे में कुछ भी नहीं जानता है)। हालांकि यह आमतौर पर .NET जेनेरिक का लाभ होता है, इसका मतलब यह भी है कि नियम अधिक सख्त हैं ... –

+0

@ थॉमस लेवेस्क मैं कहां और जान सकता हूं कि .NET का दृष्टिकोण जावा पर एक लाभ कैसे है? – LamonteCristo

उत्तर

20

दुर्भाग्य से, उन्हें संयुक्त नहीं किया जा सकता है।

आप इसे ढांचे में देख सकते हैं - यही कारण है कि उदाहरण के लिए अलग Task और Task<T> कक्षा है।

कहा जा रहा है, तो आप अक्सर IDoWork<object> का उपयोग कर और मूल्यों के लिए null गुजर, आदि

+0

मुझे आश्चर्य है कि टी == ऑब्जेक्ट, और ऑब्जेक्ट == कार्यान्वयन में शून्य है तो मैं होस्ट में कॉलबैक छोड़ सकता हूं। क्या यह उचित लगता है? – LamonteCristo

+0

@ makerofthings7 आप ~ ~ ~ कर सकते हैं - लेकिन यह अनुपयुक्त हो सकता है अगर शून्य एक अपेक्षित या मान्य मान है .. –

+1

व्यक्तिगत रूप से उनके व्यवहार अलग हैं क्योंकि मैं उन्हें उस अंतर को व्यक्त करने के लिए थोड़ा अलग नाम देना चाहता हूं। –

1

वापसी प्रकार विधि हस्ताक्षर का एक हिस्सा है द्वारा परिदृश्य के इस प्रकार में हिस्सा कार्यान्वयन, तो कर सकते हैं टी DoWork() और शून्य DoWork() अलग हैं, और शून्य एक प्रकार नहीं है और यह null नहीं है। यह एक संकेत है कि विधि से वापसी पर मूल्यांकन स्टैक में कुछ भी नहीं है।

+0

सी # रिटर्न प्रकार में [विधि हस्ताक्षर] का हिस्सा नहीं है (https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx) – suhair

संबंधित मुद्दे

 संबंधित मुद्दे