ArcObjects'i depolamak için .NET Generics mi kullanıyorsunuz?


11

ILayer, IField, vb. Gibi ArcObjects'i depolamak için .NET'te Genel türleri kullanmanın etkileri nelerdir?

Bu tür değerleri kullanırken derleyici bana bir uyarı veriyor

public class Foo
{
    private List<ILayer> fooLayers;

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

İşte uyarı:

Uyarı 15 'Kütüphane ihracatçısı uyarı işleme' ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (değer), ArcMemorialCore '. Uyarı: Tür kitaplığı ihracatçısı, imzada genel tür örneğiyle karşılaştı. Genel kod COM'a aktarılamaz. ArcMemorialCore

Endişem sadece uyarının varlığı değil, iyi tasarım uygulamaları, performans vb.


Ne uyarısı alıyorsunuz?
Reed Copsey

4
Lütfen sorunuza da bir bağlam ekleyin. Nesneleri nasıl kullandığınız hakkında daha fazla bilgi sahibi olmamız gerekir. Bildiğim kadarıyla ArcObjects sınıflarını veya bunun gibi arayüzleri kullanmanın doğasında herhangi bir sorun yoktur.
Keith G

Uyarılar ne diyor?
Hugo Estrada

Bir hata mı yoksa uyarı mı alıyorsunuz?
Jay Cummins

Uyarı. Sadece iyi derler. İlgi alanlarım, uyarının varlığının ötesindedir. Performans, iyi tasarım uygulamaları vb. Açısından daha fazla endişe duymaktadır. Uyarı: Uyarı 15 Tür kütüphane ihracatçısı uyarı işleme 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (değer), ArcMemorialCore'. Uyarı: Tür kitaplığı ihracatçısı, imzada genel tür örneğiyle karşılaştı. Genel kod COM'a aktarılamaz.
George Silva

Yanıtlar:


10

Aldığınız uyarı, sınıfınızı (veya montajınızı) işaretli olmanızdır:

[ComVisible(true)]

Bu, COM nesneleri ile uyumlu olmayan türleri kullandığınızda derleyicinin uyarı vermesine neden olur.

Bununla birlikte, jenerik ilaçların ArcObject tipleriyle kullanılmasıyla ilgili bir sorun yoktur. Bununla birlikte, bunları yalnızca uygulamanızın içindeki türler için kullanmalısınız - yani: bir değer kümesiyle çalışırken.


Buna ek olarak, örneğin COM + için genel bir tür adına başvurmak sadece bir sorun olduğuna inanıyorum List<object>. CLR'den COM + 'ya gitmek sorun olmamalı.
Dandy

1
Sınıfınızın (veya .NET 2.0+ sürümünde uygulanması tavsiye edilmeyen tüm montajın) [ComVisible (true)] olarak işaretlenmesine izin verirken, mülkünüzü [ComVisible (false)] olarak işaretleyerek bu tür uyarıları önleyebilirsiniz.
Petr Krebs


2

Derlemek için bir sorunum yok.

C # 3.5 kullanıyorum

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; }
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.