문제

최근에는 내가 말하고 공동 작업자에 대한 C++고 한탄하는 방법이 없었을 취할 문자열의 이름으로 등장하고 추출과 분야는 이름다시 말해서,그것은 없다.그는 나에게 당황보고 물었을 때 누군가가 필요합니다.

의 상단을 내리지 않았 좋은 대답을 위해,그 이외의 다른"야,나는 그것을 할 필요가 지금".그래서 내가 앉고 왔의 목록과 함께 어떤 것들이 실제로 했던 리플렉션에서 다양한 언어로 대응하고 있습니다.불행하게도,대부분의 예에서 온 웹 프로그래밍 파이썬에서,그리고 기대했다는 사람들이 여기에 더 많은 예제가 있습니다.여기 목록이 나온:

  1. 주 설정파일과 같은 줄을
    x="Hello World!"
    y=5.0
    동적으로 설정한 분야의 일부 config 체 같은 값에서 해당 파일이 있습니다.(이것이 내가 무엇을 달라고 할 수 있는 C++에서지만,실제로 할 수 없었다.)

  2. 정렬할 때는 객체 목록을 정렬 기반으로 임의적인 특성이 주어진다는 특성의 이름을 config 파일에서 또는 웹 요청을 합니다.

  3. 을 작성할 때 소프트웨어를 사용하는 네트워크 프로토콜,반사를 호출할 수 있습 방법에 기반한 문자열 값에서는 프로토콜입니다.예를 들어,내가 쓴 IRC 는 로봇이어
    !some_command arg1 arg2
    으로 메소드 호출 actions.some_command(arg1, arg2) 인쇄 어떤 기능을 다시 반환하는 IRC channel.

  4. 할 때 사용하는 파이썬's__getattr__능(는 같은 종류의 method_missing 루비/Smalltalk)었으로 작업하는 클래스 전체에 많은 통계 등 late_total.에 대한 통계는 모든이 되고 싶었을 추가할 수 있 _percent 를 얻는 통계의 백분율로 총 것을 내가 계산(예를 들면,통계가 있습니다.late_total_percent).반성이 매우 쉽습니다.

그래서 사람이 여기에 제공한 사례에서 자신의 프로그래밍의 경험을 때 시간이 반영되었다 도움이 되었습니까?다음 시간이 공동 작업자 왜 나는"하고 싶은 뭔가 하는 마음에"나는 다음과 같이 더 있을 준비했습니다.

도움이 되었습니까?

해결책

수 목록 다음 사용에 대한 반사:

  • 늦은 바인딩
  • 보안(성찰 보안상의 이유로 코드)
  • 코드 분석
  • 동적 입력(오리 입력되지 않은 가능하지 않고 반사)
  • 메타 프로그래밍

일부는 실제 사용의 반사 내 개인적인 경험에서:

  • 개발 플러그 시스템을 기반으로 반사
  • 사용 측면을 지향 프로그래밍 모델
  • 수행되는 코드는 정적 분석
  • 사용되는 다양한 의존성 주입 프레임워크
  • ...

반성이 좋은 것:)

다른 팁

내가 사용했던 반영하는 현재의 방법은 정보에 대한 예외를 로깅,etc.

string src = MethodInfo.GetCurrentMethod().ToString();
string msg = "Big Mistake";
Exception newEx = new Exception(msg, ex);
newEx.Source = src;

string src = "MyMethod";
string msg = "Big MistakeA";
Exception newEx = new Exception(msg, ex);
newEx.Source = src;

그냥 쉽게 복사/붙여 넣기 상속 및 코드가 생성됩니다.

나는 상황에서 지금 내가 있는 XML 스트림에서 오는 와이어를 통해 내가 필요로 인스턴스화하는 엔티티는 개체를 채웁니다 자체에서 요소 스트림에서.그것은 사용하기 쉽게 반영하는 엔티티는 개체를 처리할 수 있는 XML 요소를 기록하는 것보다는 거대한 유지보수 악몽 conditional statement.거기에 명확하게 간의 종속성을 XML 스키마와 어떻게 구조와 이름을 내지 제어 두 그래서 그것은 큰 문제가되지 않습니다.

거기에 많은 시간의 당신이 원하는 동적으로 인스턴스화 작업체는 형식으로 알려져 있지 않을 때까지합니다.예를 들어 또는 매퍼에서 또는 플러그인이 포함됩니다.조롱하는 프레임워크에 그것을 사용하려는 경우 쓰기 로그인 도서관 및 동적으로 검사하려는 형식과 특성의 예외가 있습니다.

고 생각되는 경우에는 조금 더 나는 아마도 더 많은 예제가 있습니다.

을 찾을 반영한다면 매우 유용 입력 데이터(xml)복잡한 구조를 가지고있는 것은 쉽게 매핑을 개체 경우 또는 나의 어떤 종류를 필요로"는"간의 관계를 인스턴스가 있습니다.

으로 반영은 상대적으로 쉽게에서 java,나는 때때로 그것을 사용에 대한 간단한 데이터(키-값도)어디서 나는 소정의 키를 사용합니다.하나 하나 손으로 그것은 간단한 결정하는 경우에는 키가 유효(경우에는 클래스가 setter setKey(문자열 데이터를)),다른 한편으로는 나의 유형을 변경할 수 있습니(텍스트)데이터 입력하고 숨 변환(e.g 간단한 캐스팅 int 에 getKey()),그 응용 프로그램의 나머지 부분에 의존하고 있습 올바르게 입력한 데이터이다.는 경우에는 유형의 일부를 키-값 쌍에 대한 변경 하나의 객체(예:양식 int 떠),나는 단지 그것을 변경하에서 데이터 개체와 사용하지 않를 확인하기 위해 염두에 두어야 파서 너무입니다.이 되지 않을 수도 있습니다 현명한 방법,성능이 문제가 되는 경우에는...

쓰 디스.꼬이 사용하는 파이썬의 사려깊은 기능을 XML 파견-RPC 및 비누를 호출합니다.RMI Java 를 사용합의 반영을 위한 api 를 전달합니다.

명령 라인을 구축하고 있음을 보여준다건물 구성에 따라 개체 명령 라인에 전달된 매개 변수다.

할 때 쓰는 단위 테스트,그것이 도움이 될 수 있을 사용하여 반영,하지만 주로 사용했던 이를 우회 접근 수정(Java).

내가 사용했던 반사에서는 C#이 있을 때 일부는 내부 또는 전용 방법에 프레임워크 또는 타사 라이브러리는 내가 원하는 액세스 할 수 있습니다.

(면책 조항:그것은 반드시 최고의 연기 때문에 개인 및 내부 방법으로 변경될 수 있습니다.하지만 그것은 일을 위해 내가 필요합니다.)

만,정적으로 형식 언어는 당신이 사용하고 싶은 반영이 필요로하는 어떤 시간에 무언가를 하는"다이나믹".그것은 편리한 장식새김을 목적으로(스캔 개체의 멤버).에서 Java 를 사용에서 JMX 및 동적 프록시는 매우 조금입니다.고 톤이 있을 한 경우에 그것은 정말 갈 수 있는 유일한 방법(꽤 많은 언제든지 당신이해야 할 뭔가를 컴파일러는 할 수 없지 않습니다.)

나는 일반적으로 사용하여 반영한 디버깅할 수 있습니다.반사할 수 있는 더 쉽고 정확하게 표시합체 시스템 내에서 이상의 구색을 인쇄 문입니다.에서 많은 언어가 있는 첫 번째 클래스 기능이 있어 호출 기능의 객체를 작성하지 않고 특별한 코드입니다.

그러나 할 수 있는 방법 당신이 원하는 무엇(ed).사용 hashtable.저장할 필드 키에 대한 필드 이름입니다.

당신이 정말로 원하는할 수 있습을 만든 다음 표준 Get/Set 기능이거나 매크로를 만들 것을 수행합니다. #define GetX() Get("X") 종류의 것입니다.

할 수 있도를 구현하 자신의 불완전한 반영하는 방법입니다.

고급 사용자를 위한 경우,당신이 컴파일 할 수 있는 코드,그것이 가능할 수 있도록 디버깅 출력 생성 및 사용 수행하는 반사입니다.

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