Использование .NET Generics для хранения ArcObjects?


11

Каковы последствия использования универсальных типов в .NET для хранения объектов ArcObject, таких как ILayer, IField и т. Д.?

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

public class Foo
{
    private List<ILayer> fooLayers;

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

Вот предупреждение:

Предупреждение 15 Обработка предупреждений экспортера библиотеки типов «ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (value), ArcMemorialCore». Предупреждение: экспортер библиотеки типов обнаружил экземпляр универсального типа в подписи. Общий код не может быть экспортирован в COM. ArcMemorialCore

Меня беспокоит не только наличие предупреждения, но и хорошие методы проектирования, производительность и т. Д.


Какое предупреждение вы получаете?
Рид Копси

4
Пожалуйста, добавьте некоторый контекст к вашему вопросу тоже. Нам нужно больше узнать о том, как вы используете объекты. Насколько я знаю, нет никаких внутренних проблем с использованием классов или интерфейсов ArcObjects, подобных этому.
Кит Дж

Что говорится в предупреждениях?
Уго Эстрада

Вы получаете сообщение об ошибке или предупреждение?
Джей Камминс

Предупреждение. Компилируется просто отлично. Мои интересы выходят за рамки предупреждения. Это больше касается производительности, хороших методов проектирования и т. Д. Предупреждение: Предупреждение 15 Обработка предупреждений экспортера библиотеки типов 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (value), 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.