आर्कऑब्जेक्ट्स को स्टोर करने के लिए .NET जेनरिक का उपयोग करना?


11

ArcObjects, जैसे ILayer, IField, आदि को स्टोर करने के लिए .NET में जेनेरिक प्रकारों का उपयोग करने के क्या निहितार्थ हैं?

कंपाइलर मुझे इस तरह के मूल्यों का उपयोग करते समय एक चेतावनी देता है

public class Foo
{
    private List<ILayer> fooLayers;

    public List<ILayer> FooLayers
    {
        get { ... }
        set { ... }
    }
}

ये है चेतावनी:

चेतावनी 15 प्रकार के पुस्तकालय निर्यातक चेतावनी प्रसंस्करण 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (value), ArcMemorialCore'। चेतावनी: टाइप लाइब्रेरी निर्यातक को एक हस्ताक्षर में एक सामान्य प्रकार का उदाहरण मिला। जेनेरिक कोड को COM को निर्यात नहीं किया जा सकता है। ArcMemorialCore

मेरी चिंता केवल चेतावनी के अस्तित्व की नहीं है, बल्कि अच्छी डिजाइन प्रथाओं, प्रदर्शन आदि की है।


आपको क्या चेतावनी मिल रही है?
रीड कोपसे जूल

4
कृपया अपने प्रश्न में कुछ संदर्भ भी जोड़ें। हमें इस बारे में अधिक जानने की आवश्यकता है कि आप वस्तुओं का उपयोग कैसे कर रहे हैं। जहां तक ​​मुझे पता है कि आर्कोबजेक्ट्स क्लास या इंटरफेस जैसी चीजों के इस्तेमाल से कोई अंतर्निहित समस्या नहीं है।
कीथ जी

चेतावनियाँ क्या कहती हैं?
ह्यूगो एस्ट्राडा

क्या आपको कोई त्रुटि या चेतावनी मिल रही है?
जे कमिंस

चेतावनी। यह ठीक संकलन करता है। मेरे हित चेतावनी के अस्तित्व से परे हैं। यह प्रदर्शन, अच्छी डिजाइन प्रथाओं आदि के संदर्भ में एक चिंता का विषय है। चेतावनी यह है: चेतावनी 15 प्रकार के पुस्तकालय निर्यातक चेतावनी प्रसंस्करण 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (मान), ArcMemorialCore'। चेतावनी: टाइप लाइब्रेरी निर्यातक को एक हस्ताक्षर में एक सामान्य प्रकार का उदाहरण मिला। जेनेरिक कोड को COM को निर्यात नहीं किया जा सकता है।
जॉर्ज सिल्वा

जवाबों:


10

आपको मिली चेतावनी इसलिए है क्योंकि आपके पास अपनी कक्षा (या विधानसभा) है:

[ComVisible(true)]

यह संकलक को चेतावनी जारी करने का कारण बनता है जब आप उन प्रकारों का उपयोग करते हैं जो COM ऑब्जेक्ट के साथ संगत नहीं हैं।

कहा जा रहा है, आर्कोबजेक्ट प्रकार के साथ जेनरिक का उपयोग करने में कोई समस्या नहीं है। हालाँकि, आपको उन्हें केवल उन प्रकारों के लिए उपयोग करना चाहिए जो आपके अनुप्रयोग के लिए आंतरिक हैं - यानी: जब आप मानों के एक सेट के साथ काम कर रहे हों।


इसे मैं मानता हूं कि यह केवल COM + के लिए एक सामान्य प्रकार के नाम का उल्लेख करने के लिए एक समस्या है, उदाहरण के लिए List<object>। CLR से COM + तक जाने में कोई समस्या नहीं होनी चाहिए।
डेंडी

1
वर्ग (या संपूर्ण असेंबली, जिसे .NET 2.0+ में अभ्यास की अनुशंसा नहीं की जाती है) को [ComVanish (सच)] के रूप में चिह्नित करने की अनुमति देते हुए आप अपनी संपत्ति को [ComV अदृश्य (झूठे)] के रूप में चिह्नित करके इस तरह की चेतावनी से बच सकते हैं।
पेट्र क्रेब्स


2

मेरे पास इसे संकलित करने के लिए कोई समस्या नहीं है।

मैं C # 3.5 का उपयोग कर रहा हूं

using System; 
using System.Collections.Generic; 
using System.Web;
using ESRI.ArcGIS.Carto;  //Perhaps not having this reference is the issue?

public class Foo
    {
        private List<ILayer> _fooLayers;

        public List<ILayer> FooLayers
        {
            get { return _fooLayers; }
            set { _fooLayers = value; }
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.