Використання .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.