Використання .NET Generics для зберігання ArcObjects?


11

Які наслідки використання загальних типів у .NET для зберігання ArcObjects, таких як ILayer, IField тощо?

Компілятор видає мені попередження при використанні таких значень

public class Foo
{
    private List<ILayer> fooLayers;

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

Ось попередження:

Попередження 15 Введіть попередження попередження експортера бібліотеки 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (значення), ArcMemorialCore'. Попередження: експортер бібліотеки типів у підписі зіткнувся із загальним екземпляром типу. Загальний код може не експортуватися до COM. ArcMemorialCore

Моя стурбованість викликає не лише існування попередження, а й належна дизайнерська практика, продуктивність тощо.


Яке попередження ви отримуєте?
Рід Копсей

4
Будь ласка, додайте контекст і до свого питання. Нам потрібно знати більше про те, як ви використовуєте об’єкти. Наскільки я знаю, немає проблем з використанням класів ArcObjects або таких інтерфейсів.
Кіт Г

Про що говорять застереження?
Хьюго Естрада

Ви отримуєте помилку чи попередження?
Jay Cummins

Увага. Складається просто чудово. Мої інтереси виходять за рамки існування попередження. Це викликає занепокоєння щодо продуктивності, належної практики дизайну тощо. Попередження: Попередження 15 Обробка попередження попередження експортера бібліотеки 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (значення), ArcMemorialCore'. Попередження: експортер бібліотеки типів у підписі зіткнувся із загальним екземпляром типу. Загальний код може не експортуватися до COM.
Джордж Сільва

Відповіді:


10

Попередження, яке ви отримали, тому що ваш клас (або збірка) позначені:

[ComVisible(true)]

Це змушує компілятор видавати попередження, коли ви використовуєте типи, несумісні з об’єктами COM.

Незважаючи на це, немає жодної проблеми з використанням генеричних файлів з типами ArcObject. Однак ви повинні використовувати їх лише для типів, які є внутрішніми у вашій програмі, тобто: коли ви працюєте з набором значень.


Додаючи до цього, я вважаю, що для COM + є лише проблема посилання на загальне ім'я типу, наприклад List<object>. Перехід від CLR до COM + не повинен бути проблемою.
Денді

1
Ви можете уникнути подібного роду попереджень, позначивши свою власність як [ComVisible (false)], одночасно дозволяючи класу (або всій збірці, що не рекомендується в .NET 2.0+) позначати як [ComVisible (true)].
Петро Кребс


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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.