Microsoft MVP성태의 닷넷 이야기
C# 6.0 델리게이트 인스턴스화 관련 질문~ [링크 복사], [링크+제목 복사]
조회: 11113
글쓴 사람
DC (originalimage at naver.com)
홈페이지
첨부 파일
 

안녕하세요~

프로그래밍은 백지인 상태에서 열심히 C#을 공부하고 있는데요~
궁금한 것은 여기저기 검색도 해보고 직접 코딩도 해보면서 익히고 있는데
델리게이트 인스턴스를 만드는 부분에서 도저히 관련 내용을 못찾겠는게 있어서
질문남겨요~

델리게이트 타입을 정의한 후에 new로 인스턴스를 만들고 거기에 메서드를 넣는것으로 설명이 되어 있는데,

예제 4.21(204P) 마지막 줄
target.Do(new GetResultDelegate(this.GetResult))
을 보면 인스턴스명도 없이 메서드의 인자를 넣는 자리에 new를 선언하는 것으로 인스턴스를 만들어 버리네요.
여기저기 찾아보니 target.Do(this.GetResult)로 줄이는 방법도 있더라고요

질문의 핵심은 정식으로 인스턴스를 만드는 과정 없이
위의 예문처럼 델리게이트를 사용하는 것에 대한 설명을 듣고 싶어요
아무리 찾아봐도 이전 단원에는 관련 설명이 없는것 같아서요~

또 뒤에 보니 비슷하게 인터페이스도 217p 마지막 두 줄
DisplayObject(new Computer());
을 보면 클래스의 인스턴스를 만들지도 않고 메서드의 인자 넣는 자리에서 new를 선언하는 것이 있네요

제가 보기에는 둘 다 같은 원리로 작동되는 것 같은데
설명 부탁드려요~













[최초 등록일: ]
[최종 수정일: 4/30/2016]


비밀번호

댓글 작성자
 



2016-04-30 01시18분
"인스턴스 명"이라기 보다는, '변수'에 담지 않고 사용하는 것이 가능하냐는 질문으로 보이는데요. 결론부터 말하면, 가능합니다. 즉, 다음의 코드는,

 MyClass var1 = new MyClass();
 test.MyMethod(var1);

var1을 굳이 또 다른 코드에서 쓸 목적이 없다면 정의하지 않고 다음과 같이 곧바로 전달해도 됩니다.

 test.MyMethod(new MyClass());

즉, 질문한 코드의 내용은 다음의 코드와 완전히 동일한 구문입니다.

 GetResultDelegate resultFunc = new GetResultDelegate(this.GetResult);
 target.Do(resultFunc);

또한, 다음의 구문도 완전히 동일한 것입니다.

 1. target.Do(new GetResultDelegate(this.GetResult);
 2. target.Do(this.GetResult);

위의 2가지 구문이 같다는 것은 197 페이지 중간 쯤에 "C# 2.0 부터는..." 이라고 하면서 설명을 해두었습니다. 2번과 같이 개발자가 코딩을 해도, C# 컴파일러는 1번과 같은 유형으로 자동으로 변환해서 컴파일해 줍니다.

정성태
2016-04-30 01시48분
[DC] 감사합니다~
정확히 궁금하던것이 시원하게 해결되었네요
그냥 그럴거 같다 싶었던 것이
정확한 설명을 들으니깐 개운해지네요 ㅎㅎ
[guest]

... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...
NoWriterDateCnt.TitleFile(s)
4772자연인10/27/201614417hwpctrl을 사용하는 사이트에서 나와 브라우저를 종료하면 오류메세지가 나옵니다. [1]파일 다운로드1
4771문종훈10/18/201614458.net 소스 질문이 있습니다 [2]
4770누구게~...10/15/201611688세도나 [1]
4769spow...10/13/201610511올리시는 게시물에 '좋아요'를 선택할 수 있도록 해주세요 [3]
4768브라운10/11/201612250질문 하나만 드려도 될까요 [4]
4767암호군10/4/201616614c# aes 128 암복호화 관련 문의드립니다. [3]
4766김신철9/29/201611472Visual Studio 2015에서 .net 3.5로 c# 6.0 사용시 문제점에 대해서 궁금합니다. [1]
4765spow...9/23/201610893참조를 통해 속성의 값을 변경하고 싶을 때 우아한 코딩 방법이 있을까요? [2]
4764지현명9/22/201612438Visual Studio 2008 c#에서 추가된 솔류션의 디버깅이 안걸립니다. [2]파일 다운로드1
4763송기태9/20/201611209안녕하세요! 질문이 있어 문의드립니다! [1]파일 다운로드1
4762김신철9/20/201612339Visual Studio 2015 마이그레이션 후 빌드 및 에러 문제.. 도와주세요~ [2]
4761JH9/19/201612750WPF로 Viewbox 사용 시 폰트 크기 일정화 여부 [1]
4760초보9/18/201612686유닉스서버(HP)에서 C# 서버 프로그램 실행 가능 한지요? [1]
4759dev009/16/201613487Queue out of memory [3]
4758임기성9/12/201613061MS오피스 워드 64비트에서 32비트 COM개체 사용방법 문의 [2]
4757조영준9/7/201611097DLL 후킹과 관련해서 질문이 있습니다. [2]
4756Kim ...9/6/201613151drag&drop 관련해서 문의 드립니다. [6]
4755stel...9/4/201611996안녕하세요! 윈도우 창에 관련되서 질문입니다.! [3]
4754초보개발자8/25/201610886UWP 의 적용 범위에 대해서 어떻게 생각하십니까? [1]
4753조호찬8/23/201615760sybase 의 한글 가져오기 문의 [7]
4752타미플루8/19/201611374IIS 로그에서 time-taken이 0이 나올수 있나요? [4]
4751김민석8/16/201611567가변크기의 구조체를 SendMessage로 타 프로세스에 전송하는 방법이 있을까요? [1]
4750강준8/13/201613100ElementHost Memory Leak 현상 (아래내용과 동일 첨부 추가^^) [5]파일 다운로드1
4749강준8/11/201612114ElementHost Memory Leak 현상 [6]
4748Bere...8/3/201610972그냥 생각이 들어서 여기 글 써봅니다. [1]
4746힘찬도약8/2/201611235[asp.net] local에서 cookies값이 읽혀지지 않는 경우 [1]
... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...