কলব্যাক কী?


139

একটি কলব্যাক কী এবং এটি সি # তে কীভাবে প্রয়োগ করা হয়?


আপনি কি এএসপি. নেট কলব্যাকস বা ডেলিগেট কলব্যাক পরামিতিগুলি উল্লেখ করছেন?
স্ল্যাक्स

8
এর অর্থ অনেকগুলি বিষয় হতে পারে - আপনি কোন প্রসঙ্গে শুনেছেন?
আপক্রিক

1
আমি মনে করি তিনি একটি অ্যাসিঙ্কের কথা বলছেন। কলব্যাক
জর্জ জনস্টন

8
-1 প্রশ্নটি অস্পষ্ট (যথেষ্ট বিশদ নয়)।
সেরিও

1
আপনার নির্দিষ্ট প্রশ্নগুলির জন্য গুগলকে জিজ্ঞাসা করা উচিত।
ওজগুর ডগাস

উত্তর:


123

ইন কম্পিউটার প্রোগ্রামিং , একটি কলব্যাক হয় এক্সিকিউটেবল কোড যা একটি হিসেবে পাঠানো হয় যুক্তি অন্যান্য কোডে।

- উইকিপিডিয়া: কলব্যাক (কম্পিউটার বিজ্ঞান)

সি # এর উদ্দেশ্যে প্রতিনিধি রয়েছে । এগুলি ইভেন্টগুলির সাথে প্রচুর পরিমাণে ব্যবহৃত হয় , কারণ কোনও ইভেন্ট স্বয়ংক্রিয়ভাবে সংখ্যক সংযুক্ত প্রতিনিধিদের (ইভেন্ট হ্যান্ডলার) ডেকে আনতে পারে।


10
আসলে একটি কলব্যাক এক্সিকিউটেবল কোডের জন্য একটি পয়েন্টার যা অন্য কোডের আর্গুমেন্ট হিসাবে পাস হয় ... পৃষ্ঠাটির একটি পর্যালোচনা দরকার
জিয়ানলুকা ঘেটিনি

8
@ জি_জি: এমন কিছু নেই যা বলে যে এটি পয়েন্টার হতে হবে। এটি সাধারণত কারণ ডেটা বিভাগটি সম্পাদনযোগ্য নয়, তবে এটি প্রযুক্তিগতভাবে একটি বাস্তবায়নের বিশদ।
জোয়ি

জোয়ি: আপনি ঠিক বলেছেন এটি বাস্তবায়নের বিশদ তবে কলব্যাকটি বাস্তবায়নের বিশদ। আপনি একক কলব্যাক ইউজনো ব্যতীত আপনার কোডটি পুনরায় লিখতে পারেন। এটি 'যখন' বনাম 'এর মতো'।
Gianluca Ghettini

1053

আমি কেবল তোমার সাথে দেখা করেছি,
এবং এটি উন্মাদ,
তবে এখানে আমার নম্বর (প্রতিনিধি),
তাই যদি কিছু ঘটে (ইভেন্ট),
আমাকে ফোন করুন, সম্ভবত (কলব্যাক)?


33
সম্পূর্ণরূপে দুর্দান্ত ব্যাখ্যা। যখনই কেউ জিজ্ঞাসা করবেন আমি এই ব্যাখ্যাটি ব্যবহার করব, আশা করি এটি ব্যবহারের অধিকার পেতে পারি?
নিকোলা ডেভিডভিক

15
+1: এটি পছন্দ। এটি গানটি নষ্ট করে দেয়, তবে এটি পড়তে হবে `তবে এখানে আমার নম্বর এবং নির্দিষ্ট ধরণের ফোন (প্রতিনিধি) ব্যবহারের জন্য নির্দেশিকাগুলি রয়েছে
গন কোডিং

8
আপনার মুখে হাসি দিয়ে প্রতিনিধি শিখুন :-)
আকাশ

8
সর্বকালের সেরা ব্যাখ্যা!
ঝেংটোনিক

3
নোট করুন যে সেই ব্যাখ্যা সহ অন্যান্য লোকদের শিক্ষাদান ডেলিগেট কেবল একটি ভাল কোরিওগ্রাফি নিয়ে কাজ করে :)
সাবেস্টিয়ান সেভরিন

87

একটি কলব্যাক একটি ফাংশন যা একটি নির্দিষ্ট কার্য সম্পাদন প্রক্রিয়া সম্পন্ন করার পরে ডাকা হবে।

কলব্যাকের ব্যবহার সাধারণত অ্যাসিনক্রোনাস যুক্তিতে থাকে।

সি # তে কলব্যাক তৈরি করতে আপনার একটি ভেরিয়েবলের ভিতরে একটি ফাংশন ঠিকানা সঞ্চয় করতে হবে। এই ব্যবহার অর্জিত হয় 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));
    }

49

সংজ্ঞা

একটি কলব্যাক এক্সিকিউটেবল কোড যা অন্য কোডের আর্গুমেন্ট হিসাবে পাস হয়।

বাস্তবায়ন

// 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

লিংক


2
হাই @serhio আপনার উত্তরের জন্য আপনাকে ধন্যবাদ এটি এখনও আমার কাছে কিছুটা দুর্বল: অন্য কোডের সাথে যুক্তি হিসাবে কোডটি ঠিক কোথায় পাস করা হয়েছে বলে মনে হয় সন্তানের প্রতিনিধিটির কাছে পঠন পদ্ধতিটি পড়ুন?
বিকেএসপুরজন

1
@ সেরিও লিঙ্কটি মারা গেছে।
যিহূদা

10

কলব্যাক হ'ল একটি ফাংশন পয়েন্টার যা আপনি অন্য ফাংশনে প্রবেশ করেন। আপনি যে ফাংশনটিতে কল করছেন সেটি শেষ হয়ে গেলে অন্য ফাংশনটি 'কলব্যাক' করবে (সম্পাদন করবে)।

পরীক্ষা করে দেখুন এই লিঙ্কে ক্লিক করুন।


2
কলব্যাক কোনও পদ্ধতির প্রতিনিধি হিসাবে প্রয়োগ করা যেতে পারে তবে আপনি সমানভাবে বলতে পারেন যে কোনও ইন্টারফেসে কলব্যাক পদ্ধতিকে সমর্থন করে এমন একটি বস্তু পাস করা কলব্যাক।
জো

Array.Sort (arrayObject); অ্যারেঅবজেক্টের উপাদানগুলির উপর কল করা অবজেক্ট.কম্পেরটো (আরেকটিওবিজে)। নেট এ ইন্টারফেস (আইসি কম্পিউটারেবল) ব্যবহার করে কলব্যাকের একটি সর্বোত্তম উদাহরণ।
রন 5504

8

আপনি যদি এএসপি. নেট কলব্যাকগুলি উল্লেখ করছেন:

এএসপি.নেট ওয়েব পৃষ্ঠাগুলির জন্য ডিফল্ট মডেলটিতে ব্যবহারকারী কোনও পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে এবং একটি বোতামে ক্লিক করে বা অন্য কিছু কর্ম সম্পাদন করে যা একটি পোস্টব্যাকের ফলাফল। পৃষ্ঠা এবং এর নিয়ন্ত্রণগুলি পুনরায় তৈরি করা হয়েছে, পৃষ্ঠা কোডটি সার্ভারে চলে এবং পৃষ্ঠার একটি নতুন সংস্করণ ব্রাউজারে রেন্ডার করা হয়। তবে কিছু পরিস্থিতিতে, কোনও পোস্টব্যাক না করে ক্লায়েন্টের কাছ থেকে সার্ভার কোড চালানো কার্যকর। যদি পৃষ্ঠায় ক্লায়েন্ট স্ক্রিপ্ট কিছু স্থিতির তথ্য বজায় রাখে (উদাহরণস্বরূপ, স্থানীয় পরিবর্তনশীল মান), পৃষ্ঠাটি পোস্ট করা এবং এর একটি নতুন অনুলিপি পাওয়া গেলে সেই অবস্থাটি নষ্ট হয়ে যায়। অতিরিক্তভাবে, পৃষ্ঠা পোস্টব্যাকগুলি ওভারহেড প্রক্রিয়াজাতকরণ প্রবর্তন করে যা কার্যকারিতা হ্রাস করতে পারে এবং ব্যবহারকারীকে পৃষ্ঠাটি প্রক্রিয়াজাতকরণ এবং পুনরায় তৈরি হওয়ার জন্য অপেক্ষা করতে বাধ্য করতে পারে।

ক্লায়েন্টের রাজ্য হারাতে এড়াতে এবং কোনও সার্ভার রাউন্ডট্রিপের প্রসেসিং ওভারহেড না জড়ানোর জন্য, আপনি একটি এএসপি.নেট ওয়েব পৃষ্ঠা কোড করতে পারেন যাতে এটি ক্লায়েন্ট কলব্যাক করতে পারে। একটি ক্লায়েন্ট কলব্যাকে, একটি ক্লায়েন্ট-স্ক্রিপ্ট ফাংশন একটি এএসপি.নেট ওয়েব পৃষ্ঠায় একটি অনুরোধ প্রেরণ করে। ওয়েব পৃষ্ঠাটি তার স্বাভাবিক জীবনচক্রের একটি পরিবর্তিত সংস্করণ চালায়। পৃষ্ঠাটি সূচনা করা হয়েছে এবং এর নিয়ন্ত্রণগুলি এবং অন্যান্য সদস্য তৈরি করা হয় এবং তারপরে একটি বিশেষ চিহ্নিত পদ্ধতি চালু করা হয়। পদ্ধতিটি আপনি কোডিং করেছেন এমন প্রক্রিয়াকরণ সম্পাদন করে এবং তারপরে ব্রাউজারে এমন কোনও মান দেয় যা অন্য ক্লায়েন্ট স্ক্রিপ্ট ফাংশন দ্বারা পড়তে পারে can এই প্রক্রিয়া জুড়ে, পৃষ্ঠা ব্রাউজারে লাইভ হয়।

সূত্র: http://msdn.microsoft.com/en-us/library/ms178208.aspx

আপনি যদি কোডে কলব্যাকগুলি উল্লেখ করছেন:

কলব্যাকগুলি প্রায়শই এমন পদ্ধতিগুলির প্রতিনিধি হয় যা নির্দিষ্ট অপারেশনটি সম্পন্ন বা সাব-অ্যাকশন সম্পাদন করার সময় ডাকা হয়। আপনি প্রায়শই এগুলি অ্যাসিক্রোনাস অপারেশনে দেখতে পাবেন। এটি একটি প্রোগ্রামিং নীতি যা আপনি প্রায় প্রতিটি কোডিং ভাষায় খুঁজে পেতে পারেন।

এখানে আরও তথ্য: http://msdn.microsoft.com/en-us/library/ms173172.aspx


4

লাইটস্ট্রিকারকে উত্সর্গ:
নমুনা কোড:

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পদ্ধতি বলা হবে। মূলত, আমরা কলব্যাক পদ্ধতিতে কল করতে প্রতিনিধি পাশ করছি।

আপনার কোনো প্রশ্ন থাকলে আমাকে জানান.


এটি আপনার প্রশ্নের কোডটি কী করছে, কীভাবে একটি কলব্যাক কীভাবে কাজ করে এবং কীভাবে এটি সি # তে কার্যকর হয় তা বর্ণনা করতে পারে, এমন প্রশ্নের উত্তর দেয় না answer
অ্যাডাম

হাই আদম, আপনার উত্তরের জন্য ধন্যবাদ। আমি লাইটস্ট্রাইকারের দ্বারা সরবরাহিত মজার ব্যাখ্যাটি কার্যকর করতে কোডটি তৈরি করেছি। আমরা একটি পদ্ধতিতে (মেটয়োরক্রাশ) প্রতিনিধি (নম্বর) দিয়ে যাচ্ছি। যদি আগ্রহী (ইভেন্ট) পদ্ধতিতে (MetYourCrush) ঘটে থাকে তবে এটি ডেলিগেটকে (নম্বর) কল করবে যা কলম্যাক পদ্ধতির রেফারেন্স ধারণ করেছিল। সুতরাং, কলম্যাকব্যাক পদ্ধতিটি কল করা হবে। মূলত, আমরা কলব্যাক পদ্ধতিতে কল করতে প্রতিনিধি পাশ করছি। আপনার কোনো প্রশ্ন থাকলে আমাকে জানান.
মণি

1

সম্ভবত অভিধান সংজ্ঞা নয়, তবে একটি কলব্যাক সাধারণত কোনও ফাংশনকে বোঝায়, যা কোনও নির্দিষ্ট বস্তুর বাহ্যিক, সঞ্চিত থাকে এবং তারপরে একটি নির্দিষ্ট ইভেন্টের জন্য ডাকা হয়।

একটি উদাহরণ হতে পারে যখন একটি ইউআই বোতাম তৈরি করা হয়, এটি কোনও ক্রিয়া সম্পাদন করে এমন কোনও ফাংশনের রেফারেন্স সঞ্চয় করে। ক্রিয়াকলাপটি কোডের একটি আলাদা অংশ দ্বারা পরিচালিত হয় তবে বোতামটি টিপলে কলব্যাক কল করা হয় এবং এটি ক্রিয়াটি সম্পাদন করার জন্য অনুরোধ করে।

সি #, শব্দটি 'কলব্যাক' ব্যবহার না করে 'ইভেন্ট' এবং 'প্রতিনিধি' ব্যবহার করে এবং আপনি এখানে প্রতিনিধিদের সম্পর্কে আরও জানতে পারেন ।


0

একটি কলব্যাক আপনাকে অন্য কোডে আর্গুমেন্ট হিসাবে এক্সিকিউটেবল কোডটি পাস করতে দেয়। সি এবং সি ++ এ এটি একটি ফাংশন পয়েন্টার হিসাবে প্রয়োগ করা হয়। .NET এ আপনি ফাংশন পয়েন্টার পরিচালনা করতে একটি প্রতিনিধি ব্যবহার করবেন।

কয়েকটি ব্যবহারের মধ্যে ত্রুটি সংকেত দেওয়া এবং কোনও ফাংশনটি কাজ করে কিনা তা নিয়ন্ত্রণে অন্তর্ভুক্ত রয়েছে।

উইকিপিডিয়া


0

কলব্যাক কাজের পদক্ষেপগুলি:

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) :, পাঠ্য সার্ভারের প্রতিক্রিয়ায় আমরা তা পাই।


0

প্রতিনিধিরা সি ++ তে ইন্টারফেস-ভিত্তিক কলব্যাকগুলির মতো একই জিনিস করেন (সিওএম এগুলি ব্যবহার করে), যদিও এটি ব্যবহার করা সহজ।

নোট করুন যে মাইক্রোসফ্ট তার জাভা বাস্তবায়ন (জে ++) তে প্রতিনিধিদের রেখেছিল তবে সান তাদের পছন্দ করে না [java.sun.com] সুতরাং শীঘ্রই জাভাটির সরকারী সংস্করণে তাদের দেখার আশা করবেন না। এগুলি আপনাকে সি ++ এ ব্যবহার করতে দেওয়ার জন্য আমি একটি প্রিপ্রোসেসর একসাথে হ্যাক করেছি, সুতরাং আপনি যদি সি # তে বা নেট নেট প্ল্যাটফর্মে (যেমন পরিচালিত সি ++ বা ভিজ্যুয়াল বেসিক.নেট) তে প্রোগ্রামিং না করে থাকেন তবে বোধ করবেন না।

আপনি যদি সি-তে পয়েন্টার ফাংশন করতে ব্যবহার করেন তবে একটি প্রতিনিধি হ'ল মূলত পয়েন্টারগুলির মধ্যে একটি জুড়ি থাকে:

  • একটি বস্তুর পয়েন্টার (alচ্ছিক)
  • Object বস্তুর একটি পদ্ধতির পয়েন্টার

এর অর্থ একটি অবিচ্ছিন্ন প্রতিনিধি আপনার প্রোগ্রামে কোনও ফাংশন সনাক্ত করতে প্রয়োজনীয় সমস্ত তথ্য পাস করে, এটি কোনও স্থির পদ্ধতি বা কোনও জিনিসের সাথে সম্পর্কিত কিনা।

আপনি এগুলিকে সি # তে এটি সংজ্ঞায়িত করুন:

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 );
    }
}

সব মিলিয়ে, তারা সি ++ তে ইন্টারফেস-ভিত্তিক কলব্যাকগুলির মতো একই কাজ করে তবে কিছুটা কম ঝামেলা সৃষ্টি করে কারণ আপনার ফাংশনগুলির নামকরণ বা সহায়তাকারী বস্তু তৈরির বিষয়ে আপনার চিন্তা করার দরকার নেই এবং আপনি কোনও পদ্ধতি ছাড়াই প্রতিনিধি তৈরি করতে পারেন। তারা আরও নমনীয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.