2012-09-04 5 views
13

यहाँ एक इंटरफेस, मेरे प्रयास से बंदरगाह MemBus करने के लिए लिया है, एक घटना एग्रीगेटर मैं बनाए रखने, विंडोज क्रम दुनिया के लिए:विंडोज रनटाइम विधियां सामान्य नहीं हो सकती हैं - कारण, कामकाज, विकल्प?

"error WME1031: ' MemBus.ISubscriber.Subscribe<M>(System.Action<M>) ' is a generic method. Windows Runtime methods cannot be generic."

:

public interface ISubscriber 
{ 
    IDisposable Subscribe<M>(Action<M> subscription); 

    #if WINRT 
    [Windows.Foundation.Metadata.DefaultOverload] 
    #endif 
    IDisposable Subscribe(object subscriber); 

    IObservable<M> Observe<M>(); 
} 

क्या मैं हो रही है एक संकलक त्रुटि है मुझे केवल संदेह है कि ऐसा क्यों है, अगर कोई स्पष्टीकरण दे सकता है, तो कृपया करें।

मेरा मुख्य प्रश्न है: विंडोज रनटाइम पर कोड पोर्ट करते समय हमें इसका सामना कैसे करना चाहिए?

जेनिक्स के साथ बहुत अधिक स्तर की कार्यक्षमता होती है। वास्तव में, हम विंडोज रनटाइम में सामान्य कक्षाओं का उपयोग करते हैं (उदा। List<T>)। आरटी घटक जेनेरिक प्रकारों का पर्दाफाश करने के लिए कैसे माना जाता है, और यदि नहीं, तो .NET 1.1 कोड लिखने के तरीकों पर वापस जाने का एकमात्र विकल्प उपलब्ध है, यानी ऑब्जेक्ट, ऑब्जेक्ट आउट और कैस्ट्स?

उत्तर

11

आपको Windows स्टोर टेम्पलेट्स (विंडोज रनटाइम घटक टेम्पलेट नहीं) से क्लास लाइब्रेरी टेम्पलेट चुनने की आवश्यकता है।

Screenshot VS2012

यह जे एस विधानसभा उपभोग करने के लिए (के रूप में वे में जेनरिक का समर्थन नहीं करते आप Windows स्टोर ऐप्स में पूर्ण सी # भाषा का उपयोग करने की अनुमति देगा, लेकिन सी की तरह अन्य भाषाओं अनुमति नहीं दी जाएगी ++ और उसी तरह से सी # करता है)।

+0

मैं इसे एक उत्तर के रूप में चिह्नित कर रहा हूं, क्योंकि मैं पोर्टिंग के बारे में सोच रहा था। एक .NET लाइब्रेरी को पोर्ट करते समय मुख्य रूप से अन्य .NET भाषाओं द्वारा उपभोग किया जाने वाला था, ऐसा लगता है कि सी # dev को लक्षित करने के लिए स्वयं को सीमित करने और कई वर्षों तक सी # देव को ज्ञात कई संरचनाओं को बनाए रखने के पक्ष में सी ++/जावास्क्रिप्ट समर्थन छोड़ने का अर्थ लगता है। जब नए विकास की बात आती है, तो जवाब अलग-अलग हो सकता है। – flq

6

छोटी कहानी यह है कि जावास्क्रिप्ट को जेनिक्स को संभालने का तरीका नहीं पता है, इसलिए एक WinRT घटक उनका उपयोग नहीं कर सकता है। लंबी चर्चा के लिए WinRT reason for disallowing custom generic types or interfaces देखें।

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