.NET Generics를 사용하여 ArcObject 저장?


11

ILayer, IField 등과 같은 ArcObject를 저장하기 위해 .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
질문에 컨텍스트를 추가하십시오. 객체 사용 방법에 대해 더 알아야합니다. 내가 아는 한 ArcObjects 클래스 또는 이와 같은 인터페이스를 사용하는 데 본질적인 문제는 없습니다.
Keith G

경고는 무엇을 말합니까?
휴고 에스트라다

오류 또는 경고가 나타 납니까?
Jay Cummins

경고. 잘 컴파일됩니다. 저의 관심사는 경고가 아닙니다. 경고는 다음과 같습니다. 경고 15 Type 라이브러리 내보내기 경고 처리 'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved (value), ArcMemorialCore'. 경고 : 형식 라이브러리 내보내기에서 서명에서 일반 형식 인스턴스가 발생했습니다. 일반 코드는 COM으로 내보낼 수 없습니다.
George Silva

답변:


10

받은 경고는 클래스 (또는 어셈블리)에 다음이 표시되어 있기 때문입니다.

[ComVisible(true)]

COM 개체와 호환되지 않는 형식을 사용할 때 컴파일러에서 경고를 발생시킵니다.

즉, ArcObject 유형의 제네릭을 사용하는 데 아무런 문제가 없습니다. 그러나 응용 프로그램 내부에있는 유형 (예 : 값 집합으로 작업 할 때)에만이 유형을 사용해야합니다.


이것에 덧붙여 COM +가 일반적인 유형 이름을 참조하는 것은 단지 문제라고 생각합니다 List<object>. CLR에서 COM +로 전환해도 문제가되지 않습니다.
Dandy

1
클래스 (또는 .NET 2.0+에서는 권장되지 않는 전체 어셈블리)가 [ComVisible (true)]로 표시되도록 허용하면서 속성을 [ComVisible (false)]로 표시하면 이러한 종류의 경고를 피할 수 있습니다.
Petr Krebs


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; }
        }
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.