문제

C#에는 다음과 같은 방법이 있습니까?

  1. 속성이있는 클래스의 모든 속성을 가져 오십시오 (모든 속성을 통해 루프를 해야하는 다음 속성이 있는지 확인하십시오.

  2. 모든 공개, 내부 및 보호 된 속성을 원하지만 개인 속성이 아닌 경우, 그렇게하는 방법을 찾을 수 없습니다. 나는 이것 만 할 수있다 :

    PropertyInfo [] props = type.getProperties (bindingflags.instance | bindingflags.public | bindingflags.nonpublic)

개인 부동산을 얻지 못하지만 다른 모든 것을 얻을 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 이것들 중 하나를 할 수있는 방법이 있다고 생각하지 않습니다.

그래도 몇 가지 유형을 반영해야합니까? 정말 병목 현상입니까? 유형 당 한 번 이상 수행하지 않아도 결과를 캐시 할 수 있습니까?

다른 팁

캐싱과 관련하여 : 속성에 액세스하는 경우 TypeDescriptor.GetProperties 그런 다음 캐싱을 무료로받습니다. 그만큼 TypeDescriptor 클래스에는 이와 같은 반사 상황을위한 다른 멋진 유틸리티 방법이 있습니다. 그것은 단지 작동합니다 public 그러나 속성 (아니오 protected 또는 internal 회원 및 필드 없음).

실제로 할 수있는 방법은 없습니다 더 빨리 - 그러나 당신이 할 수있는 일은 데이터를 캐싱하여 덜 자주하는 것입니다. 일반적인 유틸리티 클래스는이 작업을 수행하는 편리한 방법이 될 수 있습니다.

static class PropertyCache<T>
{
    private static SomeCacheType cache;
    public static SomeCacheType Cache
    {
        get
        {
            if (cache == null) Build();
            return cache;
        }
    }
    static void Build()
    {
        /// populate "cache"
    }
}

그런 다음 PropertyCache.Cache에는 게으른 인구가있는 FOO 등을위한 데이터 만 있습니다. 원하는 경우 정적 생성자를 사용할 수도 있습니다.

(2)에 대한 응답으로 : 문제의 수업/어셈블리를 벗어난 경우 internal 그리고 protected 동일합니다 private.

이들 액세스에 액세스하려면 이미 수행 한 것처럼 모든 속성을 요청하고 목록을 직접 필터링해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top