콜백이란 무엇이며 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
연결
- C #에 대한 자세한 내용 .
답변
콜백은 다른 함수에 전달하는 함수 포인터입니다. 호출하는 함수는 다른 함수가 완료되면 ‘콜백'(실행)합니다.
이 링크를 확인하십시오 .
답변
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
메소드가 호출됩니다. 기본적으로 콜백 메소드를 호출하기 위해 델리게이트를 전달합니다.
궁금한 점이 있으면 알려주세요.