동적 매개 변수를 사용한 C # 메서드 오버로딩

Arbelzapf

값 직렬화를위한 도구를 작성하려고합니다. 그리고 나는 좋은 구문이 작동하기를 바라고 있었다 .....

            float f = 9999.0f;
            ByteSerializer s = new ByteSerializer ();
            s.Write(f);

Write ()의 매개 변수는 임의의 숫자가 될 수 있습니다.

    public void Write (params dynamic[] objects)
    {

        for (int i =0;i<objects.Length;i++) {

            byteList.AddRange (GetBytes (objects[i]));

        }
    }

이제 전달 된 개체의 유형에 따라 GetBytes ()를 호출해야합니다.

    public  byte[] GetBytes ( object v)
    {
    //Shouldn't actually do anything since it's a dummy
        return new byte[0];
    }


    public  byte[] GetBytes ( System.Single v)
    {
    //Why is this not called?

        return BitConverter.GetBytes (v);

    }

그러나 개체를 매개 변수로 사용하는 메서드는 항상 곧바로 진행됩니다. 처음에는 (params object [])를 메서드 매개 변수로 시도했는데이 동작이 다소 분명하다는 것을 알았습니다. 그런데 dynamic []이 똑같이 작동하는 이유는 무엇입니까?

objects [i] .GetType ()은 System.Single을보고합니다. 그래서 여기서 무슨 일이 일어나고 있습니까? 내가하려는 것이 가능하지 않습니까?

이단 아리

메서드 오버로딩은 컴파일 타임 에 모든 인수의 유형 을 알고 있어야합니다. 여기에서는 컴파일 타임에 인수 유형을 알 수 없습니다. 왜냐하면 dynamic컴파일러가 가장 낮은 공통 유형 인 object. 의 차이 object와는 dynamicdynamic후반 구문을 결합 할 수 있습니다 -하지만 여기에 도움이되지 않습니다.

GetBytes올바른 유형 을 호출 하려면 reflection 을 사용해야 합니다 . 특히 GetMethod 를 사용 GetBytes하여 각 인수의 유형과 일치 하는 오버로드를 찾은 다음 호출하려고합니다. 호출 . 다음과 같은 것 (테스트되지 않음) :

byteList.AddRange (GetType()
        .GetMethod("GetBytes", new Type[objects[i].GetType()])
        .Invoke(null, new object[objects[i]]));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 변수를 사용하는 매개 변수로 C # 메서드에서 스레딩

분류에서Dev

메서드를 함수에 대한 매개 변수로 사용하는 C ++

분류에서Dev

C #에서 LINQ select를 메서드 매개 변수로 사용

분류에서Dev

C #에서 LINQ select를 메서드 매개 변수로 사용

분류에서Dev

선택적 매개 변수 및 나머지 매개 변수를 사용한 Typescript 함수 오버로드

분류에서Dev

Set type 매개 변수를 사용한 Java 메서드 오버로드

분류에서Dev

Blazor 바인딩을 사용하는 동적 메서드 매개 변수

분류에서Dev

F #의 out 매개 변수를 사용하여 C # 오버로드 된 메서드 호출

분류에서Dev

C-매크로를 사용하여 다른 구조체 유형 인수로 메서드 오버로딩

분류에서Dev

C ++에서 동일한 정의를 사용하여 함수 오버로딩

분류에서Dev

c # asp.net에서 IDbDataParameter []를 사용하여 매개 변수 유형을 동적으로 설정

분류에서Dev

동적 버튼 클릭 이벤트에서 다른 매개 변수로 동일한 메소드를 호출 할 때 AngularJS 구문 오류

분류에서Dev

C ++ : 매개 변수 팩을 사용하여 명시 적으로 함수 오버로드 호출

분류에서Dev

C # 메서드 매개 변수 값 로깅 자동화

분류에서Dev

C #에서 out 매개 변수의 적절한 사용

분류에서Dev

Func <> 매개 변수가 필요한 다른 C # 메서드로 C # 메서드를 전달하는 F #

분류에서Dev

qt C ++ 새로운 유사한 방법. 메서드를 오버로드하거나 새 메서드를 작성하거나 기본 매개 변수를 사용합니까?

분류에서Dev

매개 변수가없는 메서드 오버로딩

분류에서Dev

사용자를 동적 URL에서 정적 URL로 리디렉션 (2 개의 매개 변수 사용)

분류에서Dev

Neo4jClient에서 관계에 대한 매개 변수를 동적으로 사용

분류에서Dev

Ruby에서 매개 변수를 사용하여 동적으로 메서드를 만드는 방법은 무엇입니까?

분류에서Dev

Postgres 동적 SQL에서 배열을 매개 변수로 사용

분류에서Dev

Postgres 동적 SQL에서 배열을 매개 변수로 사용

분류에서Dev

클래스를 매개 변수 및 메서드로 동적으로 전달-PHP

분류에서Dev

매개 변수의 동적 개수를 사용하여 경로를 만드는 방법

분류에서Dev

C ++ 클래스와 int 매개 변수를 템플릿으로 사용하여 operator + 오버로딩

분류에서Dev

C # 'ToString'메서드에 대한 오버로드 없음은 1 개의 인수를 사용합니다.

분류에서Dev

젠킨스에서 git을 사용한 동적 매개 변수

분류에서Dev

Guava 선택적 매개 변수에 대한 메서드 인수로 선택적

Related 관련 기사

  1. 1

    동일한 변수를 사용하는 매개 변수로 C # 메서드에서 스레딩

  2. 2

    메서드를 함수에 대한 매개 변수로 사용하는 C ++

  3. 3

    C #에서 LINQ select를 메서드 매개 변수로 사용

  4. 4

    C #에서 LINQ select를 메서드 매개 변수로 사용

  5. 5

    선택적 매개 변수 및 나머지 매개 변수를 사용한 Typescript 함수 오버로드

  6. 6

    Set type 매개 변수를 사용한 Java 메서드 오버로드

  7. 7

    Blazor 바인딩을 사용하는 동적 메서드 매개 변수

  8. 8

    F #의 out 매개 변수를 사용하여 C # 오버로드 된 메서드 호출

  9. 9

    C-매크로를 사용하여 다른 구조체 유형 인수로 메서드 오버로딩

  10. 10

    C ++에서 동일한 정의를 사용하여 함수 오버로딩

  11. 11

    c # asp.net에서 IDbDataParameter []를 사용하여 매개 변수 유형을 동적으로 설정

  12. 12

    동적 버튼 클릭 이벤트에서 다른 매개 변수로 동일한 메소드를 호출 할 때 AngularJS 구문 오류

  13. 13

    C ++ : 매개 변수 팩을 사용하여 명시 적으로 함수 오버로드 호출

  14. 14

    C # 메서드 매개 변수 값 로깅 자동화

  15. 15

    C #에서 out 매개 변수의 적절한 사용

  16. 16

    Func <> 매개 변수가 필요한 다른 C # 메서드로 C # 메서드를 전달하는 F #

  17. 17

    qt C ++ 새로운 유사한 방법. 메서드를 오버로드하거나 새 메서드를 작성하거나 기본 매개 변수를 사용합니까?

  18. 18

    매개 변수가없는 메서드 오버로딩

  19. 19

    사용자를 동적 URL에서 정적 URL로 리디렉션 (2 개의 매개 변수 사용)

  20. 20

    Neo4jClient에서 관계에 대한 매개 변수를 동적으로 사용

  21. 21

    Ruby에서 매개 변수를 사용하여 동적으로 메서드를 만드는 방법은 무엇입니까?

  22. 22

    Postgres 동적 SQL에서 배열을 매개 변수로 사용

  23. 23

    Postgres 동적 SQL에서 배열을 매개 변수로 사용

  24. 24

    클래스를 매개 변수 및 메서드로 동적으로 전달-PHP

  25. 25

    매개 변수의 동적 개수를 사용하여 경로를 만드는 방법

  26. 26

    C ++ 클래스와 int 매개 변수를 템플릿으로 사용하여 operator + 오버로딩

  27. 27

    C # 'ToString'메서드에 대한 오버로드 없음은 1 개의 인수를 사용합니다.

  28. 28

    젠킨스에서 git을 사용한 동적 매개 변수

  29. 29

    Guava 선택적 매개 변수에 대한 메서드 인수로 선택적

뜨겁다태그

보관