【초보자용】delegate를 이해하려고 해도 1밀리도 이해할 수 없는 사람을 위한 delegate 입문
10303 단어 AdventCalendarC#Delegate
제목은 내 일입니다.
C#을 업무 수준에서 사용하기 시작한 지 1개월
업무의 코드로 =>>
delegate라는 말을 만나서 막혔습니다.
솔직히 끓인 의문
이미지는 이미지
즉 delegate야말로 본질 (아마)
조금씩 조사한 곳에서는 LINQ 앞에 람다 식 람다 식의 훨씬 전에
delegate를 이해하지 않으면 안되는 것 같은 것을 알았습니다.
초학자는 공식을 봐도 모르겠다.
대리자(C# 프로그래밍 가이드) | Microsoft Docs
·····
모르겠다는 것을 알았다
원래 왜 delegate가 나오는지
제13장 처리를 위양하는 대리자 (1/4)
델리게이트는 일본어로는 '위양'으로 번역되는 경우가 많다. 위양이라는 말을 알기 어렵다고 생각한다면 대표자로 생각해도 된다. 무언가의 처리를 실행시키고 싶을 때에, 처리 기능을 가지는 메소드를 직접 호출하는 것이 아니라, 대표자에게 처리를 요구하는 것이다. 대표자는 처리 기능은 가지고 있지 않지만, 그것을 처리할 수 있는 적절한 메소드를 알고 있어 그 메소드에 처리 요구를 건네준다.
”
회사에 비유한다면 「A부」의 하단이 「B부」의 하단에 부탁할 때, 「B부」의 부장이라면 모든 방법을 알고 있기 때문에 거기에 간다고 하는 느낌일까요.
즉, delegate는 대표자입니다.
검색하면 여러가지 예가 나옵니다만, 코드량이 늘어나는(조직이 거대) 위력이 발휘할 것 같은 것은 알 수 있습니다.
선구자 사이트에서 공부하기
대리자 - C#에 의한 프로그래밍 시작 | ++C++; // 미확인 비행 C
대리자는 메서드를 참조하는 형식입니다. 요컨대,
A
라는 이름의 메소드와 델리게이트형의 변수
a
가 있었다고 하면, a = A;
일을 실현하는 것이 대리자입니다.샘플
sample.cs
// SomeDelegate という名前のデリゲート型を定義
using System;
delegate void SomeDelegate(int a);
class DelegateTest
{
static void Main()
{
// SomeDelegate型の変数にメソッドを代入。
SomeDelegate a = new SomeDelegate(A);
a(256); // デリゲートを介してメソッドを呼び出す。
// この例では A(256) が呼ばれる。
}
static void A(int n)
{
Console.Write("A({0}) が呼ばれました。\n", n);
}
}
A(256) が呼ばれました。
C# 2.0부터는
SomeDelegate a = A;
라고 하는 것처럼, 메소드로부터 델리게이트에의 암묵의 변환을 할 수 있게 되었습니다.sample.cs
using System;
// SomeDelegate という名前のデリゲート型を定義
delegate void SomeDelegate(int a);
class DelegateTest
{
static void Main()
{
// SomeDelegate型の変数にメソッドを代入。
//SomeDelegate a = new SomeDelegate(A);
//C# 2.0 からはこれ
SomeDelegate a = A;
a(256); // デリゲートを介してメソッドを呼び出す。
// この例では A(256) が呼ばれる。
}
static void A(int n)
{
Console.Write("A({0}) が呼ばれました。\n", n);
}
}
=> 오징어 밖에 보이지 않는 splatoon에 오염되었습니까?
게다가 이것에 익명 메서드 표현? ? 를 더해, void A를 간략화하면 이렇게 되는 것 같습니다.
sample.cs
using System;
// SomeDelegate という名前のデリゲート型を定義
delegate void SomeDelegate(int a);
class DelegateTest
{
static void Main()
{
// SomeDelegate型の変数にメソッドを代入。
//SomeDelegate a = new SomeDelegate(A);
//C# 2.0 からはこれ
//SomeDelegate a = A;
SomeDelegate a = new SomeDelegate(delegate (int n) { Console.WriteLine("A({0}) が呼ばれました。\n", n); });
a(256); // この例では a(256) が呼ばれる。
}
//static void A(int n)
//{
// Console.Write("A({0}) が呼ばれました。\n", n);
//}
}
덧붙여 C# 3.0 이후에서는, 익명 메소드 대신에 람다 식을 사용할 수 있습니다.
대리자 (프로그래밍) - Wikipedia
sample.cs
using System;
// SomeDelegate という名前のデリゲート型を定義
delegate void SomeDelegate(int a);
class DelegateTest
{
static void Main()
{
// SomeDelegate型の変数にメソッドを代入。
//SomeDelegate a = new SomeDelegate(A);
//C# 2.0 からはこれ
//SomeDelegate a = A;
//SomeDelegate a = new SomeDelegate(delegate (int n) { Console.WriteLine("A({0}) が呼ばれました。\n", n); });
SomeDelegate a =(n)=> { Console.WriteLine("A({0}) が呼ばれました。\n", n); };
a(256); // この例では a(256) が呼ばれる。
}
//static void A(int n)
//{
// Console.Write("A({0}) が呼ばれました。\n", n);
//}
}
여기까지 오가오카 마크까지 도달! !
오, 무려
Action action = () => Console.WriteLine("Hello, World!!"); 이콜이 ()에 끼워져 오징어가 발생하고 있어 더욱 수수께끼
심지어 클리어 할 수있었습니다!
Func< T >Action< T >함수에 "< > "가 붙어 있고 수수께끼
체력이 붙었습니다・・・
다음에 하자.
이번에는 이 정도로 해 줘서 게소
이번 소스는 C# .netcore 콘솔 어플리케이션으로 복사하면 움직입니다.
여러분의 꼭 순서대로 챌린지
Reference
이 문제에 관하여(【초보자용】delegate를 이해하려고 해도 1밀리도 이해할 수 없는 사람을 위한 delegate 입문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamuuuuuun/items/b7be653d29744621b155텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)