2012-02-14 11 views
5

में सूची या शब्दकोश का उपयोग कैसे करें I मेट्रो शैली अनुप्रयोगों (win8) में उपयोग के लिए सी # WinRT घटक बनाने की कोशिश कर रहा हूं और अनुमानित प्रकारों में समस्या हो रही है। सी # WinRT घटक

ऐसा लगता है कि IVector <> और IMAP <> डेटा प्रकार उनके सुरक्षा स्तर के कारण पहुंच योग्य नहीं हैं?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Windows.Foundation.Collections; 

namespace ClassLibrary1 
{ 
    public sealed class Class1 
    { 
     public IVector<string> foo() 
     { 
      return new List<string>(); 
     } 
    } 
} 

मैं निम्नलिखित संकलक त्रुटियों हो:

Inconsistent accessibility: return type 'Windows.Foundation.Collections.IVector<string>' is less accessible than method 'ClassLibrary1.Class1.foo()' 

'Windows.Foundation.Collections.IVector<string>' is inaccessible due to its protection level 

क्या मैं गलत कर रहा हूँ

मेरे नमूना WinMD लाइब्रेरी एक वर्ग है?

संपादित करें:

आह हे!

बाहर निकलता है मुझे सीधे WinRT प्रकार के नामों का उपयोग नहीं करना चाहिए, बल्कि इसके अनुवादित .NET नामों का उपयोग करना चाहिए।

सही कोड इस तरह दिखता है:

namespace ClassLibrary1 
{ 
    public sealed class Class1 
    { 
     public IList<string> foo() 
     { 
      return new List<string>(); 
     } 
    } 
} 
+0

यह एक WinRT घटक है जो मूल एपीआई को इसके मूल पर उपयोग करता है। इसलिए इसे सूची -> IVector प्रोजेक्ट करने की आवश्यकता है। अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/windows/apps/br230301(v=vs.110).aspx देखें। मानचित्रण तालिका पृष्ठ के लगभग आधा रास्ते है। –

उत्तर

6

IIterable<T> नेट के लिए IEnumerable<T> के रूप में, IVector<T>IList<T> के रूप में पेश किया है अनुमान है, और IMap<T>IDictionary<T> के रूप में पेश किया जाता है। प्रोजेक्शन दोनों तरीकों से जाता है - दोनों उपभोग और संलेखन के लिए - इसलिए आपको हमेशा अपने .NET कोड में उन इंटरफेस के अनुमानित संस्करणों का उपयोग करना चाहिए। जब आप सदस्य को IList<T> लौटने के रूप में घोषित करते हैं, तो यह WinRT परिप्रेक्ष्य (उदा। सी ++/सीएक्स से) IVector<T> के रूप में दिखाई देगा। इसी प्रकार, यदि आप अपनी कक्षा में IDictionary लागू करते हैं, तो यह C++/CX में IMap को कार्यान्वित करने के रूप में दिखाई देगा।

यदि मुझे सही याद है, तो आपको पहले से मैप किए गए सभी प्रकारों को देखना चाहिए क्योंकि जब आप किसी .NET प्रोजेक्ट के लिए ऑब्जेक्ट ब्राउज़र का उपयोग करते हैं तो उन्हें होना चाहिए।

+0

यह वास्तव में सुरक्षा स्तर की त्रुटियों को समझाता नहीं है जो मैं देख रहा हूं। –

+0

हालांकि मेरे प्रश्न का सीधा जवाब नहीं है, आपने मुझे सही दिशा में इंगित किया। मैंने अपनी पोस्ट अपडेट की है। चीयर्स! –

+0

मुझे लगता है कि मैं काफी स्पष्ट नहीं था। मूल 'IVector' और सामान .winmd (इसलिए उन सुरक्षा स्तर त्रुटियों) में है, आप इसके बजाय वर्णित प्रतिस्थापन का उपयोग करके हमेशा इसका उपयोग करने के लिए नहीं हैं। मैं उन लोगों के लिए उत्तर अपडेट करूंगा जो खोज के माध्यम से यहां आते हैं। –