2012-12-08 11 views
13

नहीं है, मैं एक सी # कक्षा का उपयोग कर रहा हूं और यह मेरे विंडोज स्टोर ऐप (सी #) में पूरी तरह से ठीक काम करता है। लेकिन जब मैं एक Windows रनटाइम compenent मैं निम्नलिखित त्रुटि मिलती है में उपयोग करने का प्रयास करें:'System.DateTime' मान्य विंडोज रनटाइम पैरामीटर प्रकार

Calculator.Calculate(System.DateTime)' has parameter 'dateTime' of type 'System.DateTime'. 'System.DateTime' is not a valid Windows Runtime parameter type.

कक्षा में एक नमूना वस्तु:

public DateTime Calculate(DateTime dateTime) 
{ 
    int dayNumberOfDateTime = ExtractDayNumber(dateTime); 
    int sunRiseInMinutes = CalculateSunRiseInternal(tanSunPosition, differenceSunAndLocalTime); 
    return CreateDateTime(dateTime, sunRiseInMinutes); 
} 

कैसे मैं इसे ठीक कर सकते हैं? और समस्या क्या है?

+1

यदि आप इसे सार्वजनिक से आंतरिक में बदलते हैं तो क्या होता है? –

उत्तर

25

जब आप विंडोज रनटाइम घटक बनाते हैं तो आपके घटक का उपयोग उन भाषाओं द्वारा किया जा सकता है जो प्रबंधित नहीं हैं, जैसे जावास्क्रिप्ट या सी ++। स्पष्ट रूप से उन भाषाओं को कोई उचित सिस्टम उत्पन्न करने का कोई अंदाज़ा नहीं है। डेटटाइम, यह एक विशिष्ट .NET प्रकार है।

ऐसे घटकों को केवल देशी WinRT प्रकारों का उपयोग करना चाहिए और अन्यथा WinRT में मौजूद प्रतिबंधों का पालन करना चाहिए। इस तरह के प्रतिबंध को आप गेट-गो से चलाएंगे कि WinRT कार्यान्वयन विरासत का समर्थन नहीं करता है। जिसके लिए आपको अपनी कक्षा मुहरबंद घोषित करने की आवश्यकता है।

मूल WinRT प्रकार .NET प्रकारों के विपरीत हैं। वास्तविक रनटाइम प्रकार जो किसी तारीख को संग्रहीत कर सकता है वह Windows है। फाउंडेशन। डेटटाइम। एक स्ट्रिंग वास्तव में एक हैस्ट्रिंग हैंडल है। एक सूची वास्तव में एक चौथाई है। आदि।

कहने की जरूरत नहीं है, अगर आपको वास्तव में उन देशी प्रकारों का उपयोग करना होगा तो आपका प्रोग्राम अब .NET प्रोग्राम जैसा नहीं होगा। और आप नहीं करते हैं, सीएलआर के .NET 4.5 संस्करण में भाषा प्रक्षेपण निर्मित है। कोड जो स्वचालित रूप से WinRT प्रकारों को उनके समकक्ष .NET प्रकारों में अनुवादित करता है। उस अनुवाद में कुछ मोटे किनारों हैं, कुछ प्रकारों को आसानी से प्रतिस्थापित नहीं किया जा सकता है। लेकिन उनमें से अधिकांश बहुमत बिना किसी मानचित्र के मानचित्र हैं।

सिस्टम। डेटटाइम एक ऐसा मोटा किनारा है। Windows.Foundation.DateTime की भाषा प्रक्षेपण System.DateTimeOffset है। तो बस इस तरह से अपनी विधि की घोषणा के द्वारा आपकी समस्या का समाधान:

public DateTimeOffset Calculate(DateTimeOffset dateTime) { 
    // etc.. 
} 

ध्यान देने योग्य केवल एक अन्य बात यह है कि यह केवल सदस्यों अन्य कोड का उपयोग हो सकता है कि के लिए आवश्यक है। सार्वजनिक सदस्य

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