[C#] 콜백이란 무엇입니까?

콜백이란 무엇이며 C #에서 어떻게 구현됩니까?



답변

에서 컴퓨터 프로그래밍 , 콜백은 실행 코드 로 전달되는 인수 기타 코드.

위키 백과 : 콜백 (컴퓨터 과학)

C #에는 이러한 목적을위한 대리자 가 있습니다. 이벤트 는 많은 첨부 된 델리게이트 (이벤트 핸들러)를 자동으로 호출 할 수 있으므로 events 와 함께 많이 사용됩니다 .


답변

방금 당신을 만났는데,
이건 미쳤지
만 여기에 내 전화 번호 (대리인)
가 있습니다. 어떤 일이 발생하면 (이벤트),
전화주세요.


답변

콜백은 프로세스가 특정 작업을 수행 할 때 호출되는 함수입니다.

콜백 사용법은 일반적으로 비동기 논리입니다.

C #에서 콜백을 만들려면 함수 주소를 변수 안에 저장해야합니다. 이것은 사용하여 달성된다 delegate또는 의미 새로운 람다 Func또는 Action.

    public delegate void WorkCompletedCallBack(string result);

    public void DoWork(WorkCompletedCallBack callback)
    {
        callback("Hello world");
    }

    public void Test()
    {
        WorkCompletedCallBack callback = TestCallBack; // Notice that I am referencing a method without its parameter
        DoWork(callback);
    }

    public void TestCallBack(string result)
    {
        Console.WriteLine(result);
    }

오늘 C #에서는 다음과 같은 람다를 사용하여 수행 할 수 있습니다.

    public void DoWork(Action<string> callback)
    {
        callback("Hello world");
    }

    public void Test()
    {
        DoWork((result) => Console.WriteLine(result));
    }


답변

정의

콜백은 다른 코드에 인수로 전달되는 실행 코드입니다.

이행

// Parent can Read
public class Parent
{
    public string Read(){ /*reads here*/ };
}

// Child need Info
public class Child
{
    private string information;
    // declare a Delegate
    delegate string GetInfo();
    // use an instance of the declared Delegate
    public GetInfo GetMeInformation;

    public void ObtainInfo()
    {
        // Child will use the Parent capabilities via the Delegate
        information = GetMeInformation();
    }
}

용법

Parent Peter = new Parent();
Child Johny = new Child();

// Tell Johny from where to obtain info
Johny.GetMeInformation = Peter.Read;

Johny.ObtainInfo(); // here Johny 'asks' Peter to read

연결


답변

콜백은 다른 함수에 전달하는 함수 포인터입니다. 호출하는 함수는 다른 함수가 완료되면 ‘콜백'(실행)합니다.

링크를 확인하십시오 .


답변

ASP.Net 콜백을 참조하는 경우 :

ASP.NET 웹 페이지의 기본 모델에서 사용자는 페이지와 상호 작용하고 단추를 클릭하거나 포스트 백을 발생시키는 다른 작업을 수행합니다. 페이지와 해당 컨트롤이 다시 만들어지고 페이지 코드가 서버에서 실행되고 새 버전의 페이지가 브라우저에 렌더링됩니다. 그러나 경우에 따라 포스트 백을 수행하지 않고 클라이언트에서 서버 코드를 실행하는 것이 유용합니다. 페이지의 클라이언트 스크립트가 일부 상태 정보 (예 : 로컬 변수 값)를 유지 보수하는 경우 페이지를 게시하고 새 사본을 받으면 해당 상태가 삭제됩니다. 또한 페이지 포스트 백에는 처리 오버 헤드가 발생하여 성능이 저하되고 사용자가 페이지를 처리하고 다시 만들 때까지 기다리게 할 수 있습니다.

클라이언트 상태를 잃지 않고 서버 왕복의 처리 오버 헤드가 발생하지 않도록 ASP.NET 웹 페이지를 코딩하여 클라이언트 콜백을 수행 할 수 있습니다. 클라이언트 콜백에서 클라이언트 스크립트 함수는 요청을 ASP.NET 웹 페이지로 보냅니다. 웹 페이지는 일반 수명주기의 수정 된 버전을 실행합니다. 페이지가 시작되고 해당 컨트롤과 다른 멤버가 만들어진 다음 특별히 표시된 메서드가 호출됩니다. 이 메소드는 코딩 한 처리를 수행 한 후 다른 클라이언트 스크립트 함수가 읽을 수있는 값을 브라우저에 리턴합니다. 이 과정에서 페이지는 브라우저에 표시됩니다.

출처 : http://msdn.microsoft.com/en-us/library/ms178208.aspx

코드에서 콜백을 참조하는 경우 :

콜백은 종종 특정 작업이 완료되거나 하위 작업을 수행 할 때 호출되는 메서드에 위임됩니다. 종종 비동기 작업에서 찾을 수 있습니다. 거의 모든 코딩 언어에서 찾을 수있는 프로그래밍 원칙입니다.

자세한 정보는 여기 : http://msdn.microsoft.com/en-us/library/ms173172.aspx


답변

LightStriker 전용 :
샘플 코드 :

class CallBackExample
{
    public delegate void MyNumber();
    public static void CallMeBack()
    {
        Console.WriteLine("He/She is calling you.  Pick your phone!:)");
        Console.Read();
    }
    public static void MetYourCrush(MyNumber number)
    {
        int j;
        Console.WriteLine("is she/he interested 0/1?:");
        var i = Console.ReadLine();
        if (int.TryParse(i, out j))
        {
            var interested = (j == 0) ? false : true;
            if (interested)//event
            {
                //call his/her number
                number();
            }
            else
            {
                Console.WriteLine("Nothing happened! :(");
                Console.Read();
            }
        }
    }
    static void Main(string[] args)
    {
        MyNumber number = Program.CallMeBack;
        Console.WriteLine("You have just met your crush and given your number");
        MetYourCrush(number);
        Console.Read();
        Console.Read();
    }
}

코드 설명 :

위의 답변 중 하나에서 LightStriker가 제공하는 재미있는 설명을 구현하는 코드를 만들었습니다. 델리게이트 (번호)를 메소드 ( MetYourCrush)로 전달합니다. 메소드 ( MetYourCrush) 에서 관심있는 (이벤트)가 발생하면 메소드 참조를 보유한 대리자 (번호)를 호출합니다 CallMeBack. 따라서 CallMeBack메소드가 호출됩니다. 기본적으로 콜백 메소드를 호출하기 위해 델리게이트를 전달합니다.

궁금한 점이 있으면 알려주세요.