Microsoft MVP성태의 닷넷 이야기
후위 증감 연산자 오버로딩 방법 좀 알려주세요 [링크 복사], [링크+제목 복사]
조회: 3134
글쓴 사람
C# 8.0 구매자
홈페이지
첨부 파일
 
전위 증가 연산자는 오버로딩해서 쓰고있는데

아무리 뒤져봐도 후위 증가 연산자는 어떻게 오버로딩해야 할지 샘플 코드나 설명이 전혀 안나오네요.

속시원하게 코드로 직접 보여주시면 감사하겠습니다.


[연관 글]






[최초 등록일: ]
[최종 수정일: 9/18/2020]


비밀번호

댓글 작성자
 



2020-09-18 11시49분
일단, 아래의 글에 올렸으니 참고하세요.

C# - 전위/후위 증감 연산자에 대한 오버로딩 구현
; https://www.sysnet.pe.kr/2/0/12330

그리고, 다음부터는 질문하실 때 자신이 구현한 코드를 문제만 재현할 수 있는 경우로 최소화해 올려주세요. 그래야 제가 답변할 때 "예상하지 않고" 정확한 답을 할 수 있습니다.
정성태
2020-09-20 03시06분
[작성자] 감사합니다 ^^
[손님]
2020-09-20 05시44분
[작성자] 답변해주셔서 감사합니다.

아직 의문이 제대로 해결되지않고 있어 질문드려봅니다.

아래의 내용인 참조 복사를 가져간 instance는 참조 값이 변화되면 참조를 복사한 instance에도 영향을 준다는 내용은 이해하였습니다.

// class Integer인 경우
{ // Integer value = n ++;

    Integer value = n; // class이므로 참조 복사 발생
    n = n + 1; // n의 값이 바뀌지만 참조를 유지하는 value에도 영향
}

{ // Integer value = ++ n;

    n = n + 1; // n의 값이 증가 후,
    value = n; // value로 참조 복사
}

그런데 아래 내용에서 another에 value+1의 값을 넣었으면 연산순서에 따라 연산이 된 value+1의 값이 another라는 instance에 들어가야 하는데
그렇지 않고 왜 반환되는 값은 value인 것인지 이해가 가지 않습니다.

public static Integer operator ++(Integer instance)
    {
        Integer another = new Integer(instance._value + 1);
        return another;
    }

또한 위의 내용 하나만 구현하면 전위/후위 연산자가 모두 구현되는 것도 이해가 가지않습니다.
[손님]
2020-09-20 08시16분
저 내용 하나만으로 전위/후위 연산자가 모두 구현되는 이유는, 사용 측에서 그렇게 하기 때문입니다. 그러니까, 각각 다음과 같이 풀어서 C# 컴파일러가 빌드하는 것입니다.

{
    Integer n = new Integer(5);
    Integer value = n++;
}
==>
        {
            Integer n = new Integer(5);
            Integer temp = Integer.operator ++(n);
            Integer value = n;
            n = temp;
        }

{
    Integer n = new Integer(5);
    Integer value = ++n;
}
==>
        {
            Integer n = new Integer(5);
            Integer value = Integer.operator ++(n);
            n = value;
        }

그래도 이해가 안 된다면, 빌드된 EXE/DLL을 IL 코드로 풀어서 살펴보시면 됩니다.
정성태

1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5547민성8/20/20211758WPF Radio 버튼을 GroupName으로 읽어와서 비교하기 [1]
5546DeveloperST8/19/20211901C++ C# API 연동 관련 [1]
5545영귤8/18/20211339C# 14.3장 예제에서 반환 값의 값 복사 부하가 어디서 발생하는 것인가요? [4]
5544이상호8/18/20211262C# Graphics 객체 저장 가능 여부 [2]
5543정형지8/18/20211386c# outofmemoryexception [3]
5542영귤8/11/20211896C#9.0 886쪽 오류 발생 안 해요 [2]
5541서지훈8/11/20212494C# 응용프로그램(Winform)의 비정상 종료(Exit Code) [2]
5540산들마을호랑이8/11/20211530C# 많은 Control(Label 300개) Update 관련 문의 [2]파일 다운로드1
5539초초초촙8/9/2021979c# textbox 입력값이 다름 [1]파일 다운로드1
5538VS8/7/20211112vsmacros 확장자 파일을 사용하는 방법을 알 수 있을까요? [2]
5537민성8/6/20211195안녕하세요 WPF에서 이미 있는창이 있다면 안띠우게 하는 방법 [1]
55358/5/20211550안녕하세요. 초보 웹 개발자입니다. [10]파일 다운로드2
5534하영7/28/20211197clrprofiler 를 사용하여 세션정보 접근 [6]파일 다운로드1
5533함준혁7/20/20211151.net fpspread 관련 질문입니다.. [1]
5532조윤상7/15/20211714바인딩은 성공 했습니다. 그런데 브라우저에서 인증서가 없다고 나옵니다. [2]
5530ocm7/14/20211580pthread_create [7]파일 다운로드1
5529ksc7/13/20211540Source Generator 관련 질문이 있습니다. [1]
5528초심으로7/9/20211554MDI 에서 USB 연결해제 알림이 안되는 문제 질문 드려봅니다. [7]파일 다운로드1
5527wuny7/7/20211277제어관련 고민을하다가 소캣방식 선택 [2]
5526이성열7/7/20211472wpf x64로 만든 메인 프로그램에서 dll로 된 UserControl 속성이 디자인타임에 잘 안보이는 문제 [10]파일 다운로드2
5525Wuny7/7/20211794제가 만든 배포파일은 window에서 막는걸까요? [2]파일 다운로드1
5524하이스컬7/2/20211624특정 이벤트에서 다른 이벤트 호출 관련 문의 [3]
5523민우7/1/20213362도커 사용시 윈도우 이미지 생성도 가능한가요? [2]
5522질문6/28/20212181WPF에서 splash screen이 나타나는 위치를 변경할 수 있나요? [3]
5521김민혁6/24/20211762.exe 파일 에러에 관한 질문 입니다. [3]
5520한예지6/21/20211787랜덤함수 질문있습니다!! [2]
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...