이란 무엇입니까?
보장이란 무엇입니까?
C #에는 이러한 목적을위한 대리자 가 있습니다. 이벤트 는 많은 첨부 된 델리게이트 ( 이벤트 이벤트 )를 자동으로 호출 할 수 있으므로 이벤트 와 함께 많이 사용 합니다.
방금 당신을 만났는데,
이건 미쳤지
만 여기에 내 전화 번호 (대리인)
가 있습니다. 어떤 일이 발생하면 (이벤트),
전화주세요.
특정 작업을 수행 할 때 호출되는 함수입니다.
사용 사용법은 일반적으로 논리입니다.
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
) 에서 Interested (이벤트)가 발생하면 메소드 참조를 보유하고 예약 델리게이트 (번호)를 호출합니다 CallMeBack
. 따라서 CallMeBack
메서드가 호출됩니다. 기본적으로 호출하기 위해 위임을 전달합니다.
궁금한 점이 있으면 알려주세요.
일반적으로 사전 정의는 호출은 호출에서 호출되는 외부에있는 호출되는 함수를 참조하여 저장되고 특정에 호출됩니다.
예를 들어 UI 버튼이 생성 될 때를 수행하는 함수에 대한 참조 작업을 저장합니다. 액션은 코드의 다른 부분에 사용 처리 버튼을 호출하고 수행 할 액션이 호출됩니다.
C #은 '콜백'이라는 용어를 사용하는 대신 '이벤트'와 '대리자'를 사용하며 여기에서 대리자에 대해 자세히 알아볼 수 있습니다 .
구매를 사용하면 실행 가능한 코드를 다른 코드에 대한 인수로 많은 수 있습니다. C 및 C ++에서이 함수 포인터로 구현됩니다. .NET에서는 대리 튼튼 사용하여 함수 포인터를 관리합니다.
몇 가지 가지 용도는로드 오류 신호 및 기능 작동 여부 제어가 있습니다.
단계 작업 단계 :
1) ICallbackEventHandler
인터페이스 를 구현해야합니다.
2) 클라이언트 펼쳐 등록 :
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
String callbackScript = "function UseCallBack(arg, context)" + "{ " + cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "UseCallBack", callbackScript, true);
1) UI 호출 Onclient에서 EX에 대한 javascript 함수 호출을 클릭합니다. builpopup(p1,p2,p3...)
var finalfield = p1, p2, p3; UseCallBack(finalfield, "");
UseCallBack을 사용하여 서버 측에 전달 된 클라이언트의 데이터
2) public void RaiseCallbackEvent(string eventArgument)
eventArgument에서 전달 된 데이터를 가져옵니다. // 일부 서버 측 작업을 수행하고 "callbackResult"에 전달합니다.
3) GetCallbackResult()
//이 메서드를 사용하면 데이터가 클라이언트 (ReceiveServerData () 함수) 측으로 전달됩니다.
callbackResult
4) 클라이언트 측에서 데이터 ReceiveServerData(text)
가져 오기 : , 텍스트 서버 응답에서 얻을 수 있습니다.
대리자는 C ++의 인터페이스 기반 (COM에서 사용)과 동일한 작업을 수행하지만 간단합니다.
Microsoft는 델리게이트를 Java 구현 (J ++)에 넣었지만 Sun 은이를 좋아하지 않습니다 [java.sun.com]. 따라서 조만간 Java의 공식 버전에서 볼 수 있습니다. C ++에서 사용할 수있는 전처리기를 함께 해킹 소용하고 C # 또는 .NET 플랫폼 (예 : Managed C ++ 또는 Visual Basic.NET)에서 프로그래밍하지 않는 경우에 사용하기 쉬운 지.
C에서 포인터를 함수하는 데 익숙한 델리게이트는 기본적으로 포인터가 하나로 롤링 된 쌍입니다.
- 개체에 대한 포인터 (선택 사항)
- 해당 개체의 메서드에 대한 포인터
즉, 단일 델리게이트는 정적 메서드와 관련이 있든 프로그램에서 함수를 찾는 필요한 모든 정보를 전달합니다.
C #에서 다음과 같이 정의합니다.
public delegate void FooCallbackType( int a, int b, int c );
이를 사용하여 호출하려는 함수에서 델리게이트를 만듭니다.
class CMyClass
{
public void FunctionToCall( int a, int b, int c )
{
// This is the callback
}
public void Foo()
{
FooCallbackType myDelegate = new FooCallbackType(
this.FunctionToCall );
// Now you can pass that to the function
// that needs to call you back.
}
}
대리 정적 정적 메소드를 가리 키도록 만들려면 다음과 가능합니다.
class CMyClassWithStaticCallback
{
public static void StaticFunctionToCall( int a, int b, int c )
{
// This is the callback
}
public static void Foo()
{
FooCallbackType myDelegate = new FooCallbackType(
CMyClass.StaticFunctionToCall );
}
}
C ++의 인터페이스 대체와 같은 작업을 수행하지만 함수는 걱정할 필요를 지정하거나 도우미 개체를 만드는 데 걱정할 필요가 있는지 여부를 선택할 수 있기 때문에 문제가 덜 발생합니다. 더 유연합니다.
참고 URL : https://stackoverflow.com/questions/2139812/what-is-a-callback
'IT' 카테고리의 다른 글
S3 버킷에있는 객체는 어떻게 알 수 있습니까? (0) | 2020.07.12 |
---|---|
VB.NET의 숨겨진 기능? (0) | 2020.07.12 |
Kotlin에서“대신 그 대신에 단검 프로세서를 실행하는 것이 좋습니다” (0) | 2020.07.12 |
C #에서 (간단한) 추적을 추가하는 방법은 무엇입니까? (0) | 2020.07.12 |
IIS의 느린 초기로드 수정 (0) | 2020.07.12 |