একটি কলব্যাক কী এবং এটি সি # তে কীভাবে প্রয়োগ করা হয়?
একটি কলব্যাক কী এবং এটি সি # তে কীভাবে প্রয়োগ করা হয়?
উত্তর:
ইন কম্পিউটার প্রোগ্রামিং , একটি কলব্যাক হয় এক্সিকিউটেবল কোড যা একটি হিসেবে পাঠানো হয় যুক্তি অন্যান্য কোডে।
সি # এর উদ্দেশ্যে প্রতিনিধি রয়েছে । এগুলি ইভেন্টগুলির সাথে প্রচুর পরিমাণে ব্যবহৃত হয় , কারণ কোনও ইভেন্ট স্বয়ংক্রিয়ভাবে সংখ্যক সংযুক্ত প্রতিনিধিদের (ইভেন্ট হ্যান্ডলার) ডেকে আনতে পারে।
আমি কেবল তোমার সাথে দেখা করেছি,
এবং এটি উন্মাদ,
তবে এখানে আমার নম্বর (প্রতিনিধি),
তাই যদি কিছু ঘটে (ইভেন্ট),
আমাকে ফোন করুন, সম্ভবত (কলব্যাক)?
একটি কলব্যাক একটি ফাংশন যা একটি নির্দিষ্ট কার্য সম্পাদন প্রক্রিয়া সম্পন্ন করার পরে ডাকা হবে।
কলব্যাকের ব্যবহার সাধারণত অ্যাসিনক্রোনাস যুক্তিতে থাকে।
সি # তে কলব্যাক তৈরি করতে আপনার একটি ভেরিয়েবলের ভিতরে একটি ফাংশন ঠিকানা সঞ্চয় করতে হবে। এই ব্যবহার অর্জিত হয় 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);
}
আজ সি # তে ল্যাম্বদা ব্যবহার করে এটি করা যেতে পারে:
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
লিংক
কলব্যাক হ'ল একটি ফাংশন পয়েন্টার যা আপনি অন্য ফাংশনে প্রবেশ করেন। আপনি যে ফাংশনটিতে কল করছেন সেটি শেষ হয়ে গেলে অন্য ফাংশনটি 'কলব্যাক' করবে (সম্পাদন করবে)।
পরীক্ষা করে দেখুন এই লিঙ্কে ক্লিক করুন।
আপনি যদি এএসপি. নেট কলব্যাকগুলি উল্লেখ করছেন:
এএসপি.নেট ওয়েব পৃষ্ঠাগুলির জন্য ডিফল্ট মডেলটিতে ব্যবহারকারী কোনও পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে এবং একটি বোতামে ক্লিক করে বা অন্য কিছু কর্ম সম্পাদন করে যা একটি পোস্টব্যাকের ফলাফল। পৃষ্ঠা এবং এর নিয়ন্ত্রণগুলি পুনরায় তৈরি করা হয়েছে, পৃষ্ঠা কোডটি সার্ভারে চলে এবং পৃষ্ঠার একটি নতুন সংস্করণ ব্রাউজারে রেন্ডার করা হয়। তবে কিছু পরিস্থিতিতে, কোনও পোস্টব্যাক না করে ক্লায়েন্টের কাছ থেকে সার্ভার কোড চালানো কার্যকর। যদি পৃষ্ঠায় ক্লায়েন্ট স্ক্রিপ্ট কিছু স্থিতির তথ্য বজায় রাখে (উদাহরণস্বরূপ, স্থানীয় পরিবর্তনশীল মান), পৃষ্ঠাটি পোস্ট করা এবং এর একটি নতুন অনুলিপি পাওয়া গেলে সেই অবস্থাটি নষ্ট হয়ে যায়। অতিরিক্তভাবে, পৃষ্ঠা পোস্টব্যাকগুলি ওভারহেড প্রক্রিয়াজাতকরণ প্রবর্তন করে যা কার্যকারিতা হ্রাস করতে পারে এবং ব্যবহারকারীকে পৃষ্ঠাটি প্রক্রিয়াজাতকরণ এবং পুনরায় তৈরি হওয়ার জন্য অপেক্ষা করতে বাধ্য করতে পারে।
ক্লায়েন্টের রাজ্য হারাতে এড়াতে এবং কোনও সার্ভার রাউন্ডট্রিপের প্রসেসিং ওভারহেড না জড়ানোর জন্য, আপনি একটি এএসপি.নেট ওয়েব পৃষ্ঠা কোড করতে পারেন যাতে এটি ক্লায়েন্ট কলব্যাক করতে পারে। একটি ক্লায়েন্ট কলব্যাকে, একটি ক্লায়েন্ট-স্ক্রিপ্ট ফাংশন একটি এএসপি.নেট ওয়েব পৃষ্ঠায় একটি অনুরোধ প্রেরণ করে। ওয়েব পৃষ্ঠাটি তার স্বাভাবিক জীবনচক্রের একটি পরিবর্তিত সংস্করণ চালায়। পৃষ্ঠাটি সূচনা করা হয়েছে এবং এর নিয়ন্ত্রণগুলি এবং অন্যান্য সদস্য তৈরি করা হয় এবং তারপরে একটি বিশেষ চিহ্নিত পদ্ধতি চালু করা হয়। পদ্ধতিটি আপনি কোডিং করেছেন এমন প্রক্রিয়াকরণ সম্পাদন করে এবং তারপরে ব্রাউজারে এমন কোনও মান দেয় যা অন্য ক্লায়েন্ট স্ক্রিপ্ট ফাংশন দ্বারা পড়তে পারে can এই প্রক্রিয়া জুড়ে, পৃষ্ঠা ব্রাউজারে লাইভ হয়।
সূত্র: 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
পদ্ধতি বলা হবে। মূলত, আমরা কলব্যাক পদ্ধতিতে কল করতে প্রতিনিধি পাশ করছি।
আপনার কোনো প্রশ্ন থাকলে আমাকে জানান.
সম্ভবত অভিধান সংজ্ঞা নয়, তবে একটি কলব্যাক সাধারণত কোনও ফাংশনকে বোঝায়, যা কোনও নির্দিষ্ট বস্তুর বাহ্যিক, সঞ্চিত থাকে এবং তারপরে একটি নির্দিষ্ট ইভেন্টের জন্য ডাকা হয়।
একটি উদাহরণ হতে পারে যখন একটি ইউআই বোতাম তৈরি করা হয়, এটি কোনও ক্রিয়া সম্পাদন করে এমন কোনও ফাংশনের রেফারেন্স সঞ্চয় করে। ক্রিয়াকলাপটি কোডের একটি আলাদা অংশ দ্বারা পরিচালিত হয় তবে বোতামটি টিপলে কলব্যাক কল করা হয় এবং এটি ক্রিয়াটি সম্পাদন করার জন্য অনুরোধ করে।
সি #, শব্দটি 'কলব্যাক' ব্যবহার না করে 'ইভেন্ট' এবং 'প্রতিনিধি' ব্যবহার করে এবং আপনি এখানে প্রতিনিধিদের সম্পর্কে আরও জানতে পারেন ।
একটি কলব্যাক আপনাকে অন্য কোডে আর্গুমেন্ট হিসাবে এক্সিকিউটেবল কোডটি পাস করতে দেয়। সি এবং সি ++ এ এটি একটি ফাংশন পয়েন্টার হিসাবে প্রয়োগ করা হয়। .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 ফাইনালফিল্ড = পি 1, পি 2, পি 3;
UseCallBack(finalfield, "");
ক্লায়েন্টের ডেটা ইউজক্যালব্যাক ব্যবহার করে সার্ভারের পাশ দিয়ে গেছে
2) public void RaiseCallbackEvent(string eventArgument)
ইভেন্টআরগমেন্টে আমরা পাস করা ডেটা পাই // কিছু সার্ভার সাইড অপারেশন করি এবং "কলব্যাকআরসাল্ট" এ পাস করি
3) GetCallbackResult()
// এই পদ্ধতিটি ব্যবহার করে ডেটা ক্লায়েন্টের কাছে (রিসিভসারভারডাটা () ফাংশন) পাশ করা হবে
callbackResult
৪) ক্লায়েন্টের পক্ষ থেকে ডেটা পান
ReceiveServerData(text)
:, পাঠ্য সার্ভারের প্রতিক্রিয়ায় আমরা তা পাই।
প্রতিনিধিরা সি ++ তে ইন্টারফেস-ভিত্তিক কলব্যাকগুলির মতো একই জিনিস করেন (সিওএম এগুলি ব্যবহার করে), যদিও এটি ব্যবহার করা সহজ।
নোট করুন যে মাইক্রোসফ্ট তার জাভা বাস্তবায়ন (জে ++) তে প্রতিনিধিদের রেখেছিল তবে সান তাদের পছন্দ করে না [java.sun.com] সুতরাং শীঘ্রই জাভাটির সরকারী সংস্করণে তাদের দেখার আশা করবেন না। এগুলি আপনাকে সি ++ এ ব্যবহার করতে দেওয়ার জন্য আমি একটি প্রিপ্রোসেসর একসাথে হ্যাক করেছি, সুতরাং আপনি যদি সি # তে বা নেট নেট প্ল্যাটফর্মে (যেমন পরিচালিত সি ++ বা ভিজ্যুয়াল বেসিক.নেট) তে প্রোগ্রামিং না করে থাকেন তবে বোধ করবেন না।
আপনি যদি সি-তে পয়েন্টার ফাংশন করতে ব্যবহার করেন তবে একটি প্রতিনিধি হ'ল মূলত পয়েন্টারগুলির মধ্যে একটি জুড়ি থাকে:
এর অর্থ একটি অবিচ্ছিন্ন প্রতিনিধি আপনার প্রোগ্রামে কোনও ফাংশন সনাক্ত করতে প্রয়োজনীয় সমস্ত তথ্য পাস করে, এটি কোনও স্থির পদ্ধতি বা কোনও জিনিসের সাথে সম্পর্কিত কিনা।
আপনি এগুলিকে সি # তে এটি সংজ্ঞায়িত করুন:
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 );
}
}
সব মিলিয়ে, তারা সি ++ তে ইন্টারফেস-ভিত্তিক কলব্যাকগুলির মতো একই কাজ করে তবে কিছুটা কম ঝামেলা সৃষ্টি করে কারণ আপনার ফাংশনগুলির নামকরণ বা সহায়তাকারী বস্তু তৈরির বিষয়ে আপনার চিন্তা করার দরকার নেই এবং আপনি কোনও পদ্ধতি ছাড়াই প্রতিনিধি তৈরি করতে পারেন। তারা আরও নমনীয়।