कॉलबैक क्या है और इसे C # में कैसे लागू किया जाता है?
कॉलबैक क्या है और इसे C # में कैसे लागू किया जाता है?
जवाबों:
में कंप्यूटर प्रोग्रामिंग , एक कॉलबैक है निष्पादन योग्य कोड है कि एक के रूप में पारित हो जाता है तर्क अन्य कोड के लिए।
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
लिंक
कॉलबैक एक फ़ंक्शन पॉइंटर है जिसे आप दूसरे फ़ंक्शन में पास करते हैं। जिस फ़ंक्शन को आप कॉल कर रहे हैं वह पूरा होने पर दूसरे फ़ंक्शन को 'कॉलबैक' (निष्पादित) करेगा।
की जाँच करें इस लिंक।
यदि आप 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
लाइटस्ट्राइकर के लिए समर्पण:
नमूना कोड:
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();
}
}
कोड स्पष्टीकरण:
मैंने उत्तर में से एक में लाइटस्टाइकर द्वारा प्रदान की गई मजेदार व्याख्या को लागू करने के लिए कोड बनाया। हम एक विधि ( MetYourCrush
) को प्रतिनिधि (संख्या) पास कर रहे हैं । यदि रुचि (घटना) विधि में होती है ( MetYourCrush
) तो यह प्रतिनिधि (संख्या) को बुलाएगा जो CallMeBack
विधि के संदर्भ को पकड़े हुए था । तो, CallMeBack
विधि कहा जाएगा। मूल रूप से, हम कॉलबैक पद्धति को कॉल करने के लिए प्रतिनिधि को पास कर रहे हैं।
यदि आपके कोई सवाल हैं तो कृपया मुझे बताएं।
संभवतः शब्दकोश की परिभाषा नहीं है, लेकिन एक कॉलबैक आमतौर पर एक फ़ंक्शन को संदर्भित करता है, जो एक विशेष वस्तु के लिए बाहरी है, संग्रहीत किया जा रहा है और फिर एक विशिष्ट घटना पर बुलाया जाता है।
एक उदाहरण हो सकता है जब एक यूआई बटन बनाया जाता है, यह एक फ़ंक्शन के संदर्भ को संग्रहीत करता है जो एक क्रिया करता है। कार्रवाई कोड के एक अलग हिस्से द्वारा नियंत्रित की जाती है लेकिन जब बटन दबाया जाता है, तो कॉलबैक कहा जाता है और यह कार्रवाई करने के लिए आमंत्रित करता है।
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) यूआई कॉल से ओनक्लिएंट क्लिक कॉल जावास्क्रिप्ट फ़ंक्शन के लिए EX: - builpopup(p1,p2,p3...)
var फाइनलफ़ील्ड = p1, P2, p3;
UseCallBack(finalfield, "");
UseCallBack का उपयोग करके क्लाइंट की ओर से सर्वर से डेटा पास किया गया
2) public void RaiseCallbackEvent(string eventArgument)
EventArgument में हम पास किए गए डेटा को प्राप्त करते हैं // कुछ सर्वर साइड ऑपरेशन करते हैं और "callbackResult" पर जाते हैं
3) GetCallbackResult()
// इस पद्धति का उपयोग करके डेटा क्लाइंट (ReceiveServerData () फ़ंक्शन) को पास किया जाएगा
callbackResult
4) ग्राहक की ओर से डेटा प्राप्त करें:
ReceiveServerData(text)
पाठ सर्वर प्रतिक्रिया में, हमें मिल जाता है।
प्रतिनिधि C ++ में इंटरफ़ेस-आधारित कॉलबैक के रूप में एक ही काम करते हैं (COM इन का उपयोग करता है), हालांकि उपयोग करने के लिए बहुत सरल हैं।
ध्यान दें कि Microsoft ने अपने जावा कार्यान्वयन (J ++) में प्रतिनिधियों को रखा था, लेकिन सूर्य उन्हें पसंद नहीं करता [java.sun.com] इसलिए उन्हें जल्द ही किसी भी समय जावा के आधिकारिक संस्करण में देखने की उम्मीद नहीं है। मैंने आपको C ++ में उनका उपयोग करने देने के लिए एक प्रीप्रोसेसर को हैक किया है, इसलिए यदि आप C # या .NET प्लेटफ़ॉर्म (यानी प्रबंधित 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 ++ में इंटरफ़ेस-आधारित कॉलबैक के रूप में एक ही काम करते हैं, लेकिन थोड़ी कम परेशानी का कारण बनते हैं क्योंकि आपको अपने कार्यों के नामकरण या सहायक ऑब्जेक्ट बनाने के बारे में चिंता करने की आवश्यकता नहीं है, और आप प्रतिनिधियों को किसी भी विधि से बाहर कर सकते हैं। वे अधिक लचीले हैं।