리플렉션을 사용하여 모든 데이터 유형의 상수를 획득하는 방법
흥미로운 질문은 런타임 중에 특정 데이터 유형 내에 존재하는 상수를 확인하는 것입니다. . 반사의 원리를 사용하여 이를 달성할 수 있는 방법을 조사해 보겠습니다.
반사를 통해 상수의 영역으로 뛰어들기
상수 획득의 미스터리를 풀기 위해 다음을 사용합니다. 반사 무기고가 제공하는 용감한 방법. Reflection을 사용하면 유형을 면밀히 조사하고 조작하여 유형에 숨겨진 보석을 꺼낼 수 있습니다.
상수 공개에 대한 모범 가이드
이 모험을 시작하려면, 우리는 주어진 유형의 핵심을 조사하고 불변성을 추출하는 예시적인 루틴을 제공합니다. 상수:
private FieldInfo[] GetConstants(System.Type type) { // Initialize an assembly of constants ArrayList constants = new ArrayList(); // Summon an army of field explorers to unearth all public, static gems FieldInfo[] fieldInfos = type.GetFields( // Command the retrieval of public and static fields BindingFlags.Public | BindingFlags.Static | // Extend the search to the depth of base types BindingFlags.FlattenHierarchy); // Patrol through the reconnaissance report, enlisting only the immutable constants foreach(FieldInfo fi in fieldInfos) // Assess if the field's value is immutable and endures from compile-time // Exclude any field that can be tampered with in the constructor if(fi.IsLiteral && !fi.IsInitOnly) constants.Add(fi); // Formulate an array of FieldInfos holding the unearthed constants return (FieldInfo[])constants.ToArray(typeof(FieldInfo)); }
세련된 손길을 위해 제네릭과 LINQ 수용
앞서 언급한 접근 방식은 제네릭의 우아함과 LINQ의 강력한 기능을 통해 더욱 구체화될 수 있습니다. 이러한 변환을 통해 우리는 더욱 깔끔하고 간결한 코드베이스를 얻을 수 있습니다.
private List<FieldInfo> GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); }
단순함의 획기적
우리는 미니멀리즘을 추구하면서 이 세련된 접근 방식을 간결한 접근 방식으로 압축했습니다. liner:
type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
이 무기고로 무장한 기술을 사용하면 이제 모든 데이터 유형의 핵심에 숨겨진 비밀을 밝힐 수 있습니다.
위 내용은 리플렉션을 사용하여 모든 데이터 유형의 상수를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!