উত্তর:
একটি প্রতিনিধি একটি নামযুক্ত প্রকার যা নির্দিষ্ট ধরণের পদ্ধতির সংজ্ঞা দেয়। শ্রেণীর সংজ্ঞা যেমন প্রদত্ত ধরণের বিষয়টিকে সংজ্ঞায়িত করে তার জন্য সমস্ত সদস্যকে রাখে, প্রতিনিধি তার ধরণের যে পদ্ধতিটি সংজ্ঞায়িত করে তার জন্য পদ্ধতি স্বাক্ষরের বাইরে রাখেন।
এই বিবৃতিটির ভিত্তিতে, একটি প্রতিনিধি একটি ফাংশন পয়েন্টার এবং এটি সেই ফাংশনটি দেখতে কেমন তা সংজ্ঞায়িত করে।
একজন ডেলিগেটের বাস্তব জগত প্রয়োগের জন্য একটি দুর্দান্ত উদাহরণ হ'ল প্রিডিকেট । লিঙ্কটি থেকে উদাহরণে, আপনি লক্ষ্য করবেন যে অ্যারে.ফাইন্ড অনুসন্ধান করতে অ্যারে এবং তারপরে কী সন্ধান করতে হবে তার মানদণ্ড পরিচালনা করার জন্য একটি শিকারী গ্রহণ করে। এই ক্ষেত্রে এটি প্রডিকেট স্বাক্ষরের সাথে মেলে এমন একটি প্রোডাক্ট জিটি 10 পাস করে।
যেমন "লার্নিং সি # 3.0: সি # 3.0 এর মূলসূত্রগুলি আয়ত্ত করুন" তে বলা আছে
সাধারণ পরিস্থিতি: একজন রাষ্ট্রপ্রধান মারা গেলে, মার্কিন যুক্তরাষ্ট্রের রাষ্ট্রপতি সাধারণত ব্যক্তিগতভাবে জানাজায় অংশ নেওয়ার সময় পান না। পরিবর্তে, তিনি একটি প্রতিনিধি প্রেরণ। প্রায়শই এই প্রতিনিধি ভাইস প্রেসিডেন্ট হন, তবে কখনও কখনও ভিপি অনুপলব্ধ থাকে এবং রাষ্ট্রপতির অবশ্যই অন্য কাউকে প্রেরণ করতে হবে, যেমন সেক্রেটারি অফ সেক্রেটারি বা এমনকি প্রথম মহিলা। তিনি একক ব্যক্তির কাছে তাঁর অর্পিত কর্তৃত্বকে "হার্ডওয়ার" করতে চান না; যে কেউ সঠিক আন্তর্জাতিক প্রোটোকল সম্পাদন করতে সক্ষম এমনকে এই দায়িত্ব অর্পণ করতে পারেন।
রাষ্ট্রপতি কী দায়িত্ব অর্পণ করা হবে (জানাজায় অংশ নেওয়া), কোন প্যারামিটারগুলি পাশ করা হবে (সমবেদনা, সদয় কথা) এবং তিনি কী প্রত্যাবর্তন প্রত্যাশা করবেন (শুভেচ্ছার) আগে থেকেই সংজ্ঞা দিয়েছিলেন। তারপরে তাঁর রাষ্ট্রপতির গতির অগ্রগতির সাথে সাথে তিনি "রানটাইম" সময়ে একটি নির্দিষ্ট ব্যক্তিকে সেই দায়িত্ব অর্পণ করেন।
প্রোগ্রামিংয়ের পরিস্থিতিতে: আপনার প্রায়শই এমন পরিস্থিতিতে পড়তে হয় যেখানে আপনাকে কোনও নির্দিষ্ট ক্রিয়াকলাপ চালানো দরকার তবে আপনি কোন পদ্ধতি বা কোন অবজেক্টটি আগে থেকেই জানেন না আপনি এটি সম্পাদন করার জন্য আহ্বান জানাতে চাইবেন।
উদাহরণস্বরূপ: কোন বোতামটি না জানতে পারে যে কোন বস্তু বা বস্তুকে অবহিত করা দরকার। কোনও নির্দিষ্ট বস্তুর বোতামটি তারের পরিবর্তে, আপনি একটি প্রতিনিধিটির সাথে বোতামটি সংযুক্ত করবেন এবং প্রোগ্রামটি সম্পাদন করার সময় সেই প্রতিনিধিটিকে কোনও নির্দিষ্ট পদ্ধতিতে সমাধান করবেন resolve
জেনেরিক তালিকার জন্য প্রতিনিধিদের একটি সাধারণ ব্যবহার এক-লাইন ফোরচ অপারেশন তৈরি করতে অ্যাকশন প্রতিনিধিদের (বা এটির বেনামে সমতুল্য) মাধ্যমে হয়:
myList.Foreach( i => i.DoSomething());
আমি একটি তালিকা অনুসন্ধান বা ছাঁটাই করতে প্রেডিকেট প্রতিনিধিটিকেও বেশ দরকারী বলে মনে করি:
myList.FindAll( i => i.Name == "Bob");
myList.RemoveAll( i => i.Name == "Bob");
আমি জানি আপনি কোনও কোডের প্রয়োজন নেই বলেছিলেন, তবে কোডের মাধ্যমে এর কার্যকারিতা প্রকাশ করা আমার পক্ষে আরও সহজ মনে হয়েছে। :)
রিয়েল-ওয়ার্ল্ড কোডে ডেলিগেট প্যাটার্নটি কীভাবে ব্যবহৃত হয় তা যদি আপনি আগ্রহী হন তবে ম্যাক ওএস এক্স-এ কোকো ছাড়া আর কোথাও দেখবেন না Coc নকশা যাতে প্রতিটি UI উপাদান subclassing বা অন্য উপায়ের পরিবর্তে প্রতিনিধিদের মাধ্যমে প্রসারিত করার উদ্দেশ্যে করা হয়।
আরও তথ্যের জন্য, আমি এখানে প্রতিনিধিদের সম্পর্কে অ্যাপলের কী বক্তব্য রয়েছে তা খতিয়ে দেখার পরামর্শ দিই ।
আমার একটি প্রকল্প ছিল যা উইন 32 পাইথন ব্যবহার করেছিল।
বিভিন্ন কারণে, কিছু মডিউল ডিবি অ্যাক্সেস করতে odbc.py ব্যবহার করে এবং অন্যান্য মডিউল - পাইডবিসি.পি।
উভয় ধরণের মডিউল দ্বারা কোনও ফাংশনটি ব্যবহার করার প্রয়োজন হলে একটি সমস্যা হয়েছিল। এটি একটি যুক্তি হিসাবে এটিতে একটি সংযোগ বস্তুটি পাস হয়েছিল, তবে তারপরে এটি জানতে হবে যে সময়গুলি উপস্থাপনের জন্য dbi.dbi তারিখ ব্যবহার করতে হবে বা তারিখের সময়।
এটি কারণ ছিল odbc.py দ্বারা প্রত্যাশিত, এসকিউএল স্টেটমেন্টের মান হিসাবে, dbi.dbiDate হিসাবে তারিখ যেখানে pyodbc.py প্রত্যাশিত তারিখের মান।
আরও একটি জটিলতা হ'ল যে odbc.py এবং pyodbc.py দ্বারা নির্মিত সংযোগ বস্তুগুলি কোনও অতিরিক্ত ক্ষেত্র সেট করার অনুমতি দেয় না।
আমার সমাধানটি ছিল একটি প্রতিনিধি শ্রেণীর দ্বারা odbc.odbc (...) এবং pyodbc.pyodbc (...) দ্বারা ফিরে আসা সংযোগের বিষয়গুলি মোড়ানো, যাতে অতিরিক্ত ক্ষেত্রের মান হিসাবে কাঙ্ক্ষিত সময় উপস্থাপনা ফাংশন থাকে এবং কোন প্রতিনিধিরা অন্যান্য সমস্ত ক্ষেত্রের আসল সংযোগ অবজেক্টে অনুরোধ।
আমি আপনার মত একই প্রশ্ন ছিল এবং একটি উত্তর জন্য এই সাইটে গিয়েছিলাম।
স্পষ্টতই, আমি এই থ্রেডের উদাহরণগুলির মাধ্যমে স্কিম করেছিলাম যদিও আমি এটি আরও ভাল বুঝতে পারি নি।
আমি এখন পড়েছি এমন প্রতিনিধিদের জন্য আমি দুর্দান্ত ব্যবহার পেয়েছি: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx
এটি নতুন ব্যবহারকারীদের কাছে আরও সুস্পষ্ট বলে মনে হতে পারে কারণ পোষ্ট / জিইটি (কোয়েরি স্ট্রিং) সহ এএসপি.এনইটি ওয়েবসাইটের চেয়ে মানগুলি পাস করতে ফর্মগুলি আরও জটিল ..
মূলত আপনি একটি প্রতিনিধিকে সংজ্ঞায়িত করেন যা " টেক্সটবক্স পাঠ্য "টিকে পরামিতি হিসাবে গ্রহণ করে।
// আবেদনপত্র 1
// Class Property Definition
public delegate void delPassData(TextBox text);
// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
Form2 frm= new Form2();
delPassData del=new delPassData(frm.funData);
del(this.textBox1);
frm.Show();
}
// সংক্ষিপ্তসার: ডেলিগেট সংজ্ঞায়িত করুন, নতুন ফর্ম 2 ক্লাস ইনস্ট্যান্ট করুন, ডেলিগেটের জন্য ফানডেটা () ফাংশন বরাদ্দ করুন, আপনার টেক্সটবক্সে প্রতিনিধিটিকে পাস করুন। ফর্মটি দেখান।
// ফর্ম 2
public void passData(TextBox txtForm1)
{
label1.Text = txtForm1.Text;
}
// সংক্ষিপ্তসার: টেক্সটবক্স txtForm1টিকে পরামিতি হিসাবে গ্রহণ করুন (আপনার প্রতিনিধি হিসাবে সংজ্ঞায়িত) এবং পাঠ্যবক্সের পাঠ্যে লেবেল পাঠ্য নির্ধারণ করুন।
আমি আশা করি এটি প্রতিনিধিদের কিছুটা ব্যবহার আলোকিত করে :) ..
একটি দ্রুত গুগল অনুসন্ধান এই http://en.wikedia.org/wiki/Delegation_ Pattern নিয়ে আসে । মূলত, যে কোনও সময় আপনি যখন এমন কোনও অবজেক্ট ব্যবহার করেন যা এটি অন্য কোনও বস্তুর কাছে কল পাঠিয়ে দেয় তারপরে আপনি প্রতিনিধিত্ব করছেন।