সমস্ত ফানক প্রতিনিধি একটি মান ফেরত দেয়। .NET প্রতিনিধিগুলি কী কী এমন পদ্ধতিতে ব্যবহার করা যায় যা বাতিল হয়ে যায়?
সমস্ত ফানক প্রতিনিধি একটি মান ফেরত দেয়। .NET প্রতিনিধিগুলি কী কী এমন পদ্ধতিতে ব্যবহার করা যায় যা বাতিল হয়ে যায়?
উত্তর:
সমস্ত ফানক প্রতিনিধি কিছু ফেরত দেয়; সমস্ত অ্যাকশন প্রতিনিধি বাতিল বাতিল।
Func<TResult>
কোনও যুক্তি নেয় না এবং ট্রসাল্ট প্রদান করে:
public delegate TResult Func<TResult>()
Action<T>
একটি যুক্তি নেয় এবং একটি মান ফেরত দেয় না:
public delegate void Action<T>(T obj)
Action
সবচেয়ে সহজ, 'খালি' প্রতিনিধি:
public delegate void Action()
এছাড়াও রয়েছে Func<TArg1, TResult>
এবং Action<TArg1, TArg2>
(এবং অন্য 16 টি তর্ক অবধি)। এই সমস্ত (বাদে Action<T>
) .NET 3.5 এ নতুন (সিস্টেম.করে সংজ্ঞায়িত)।
Func<,,, ... ,>
) পর্যন্ত গিয়েছিল তবে প্রতিটি "সিরিজের" শেষ আট প্রকারের সংজ্ঞা দেওয়া হয়েছে System.Core.dll
, এতে নয় mscorlib.dll
, তাই কারণ হ'ল মিচিয়েলভু কেন তাদের দেখেনি। যাইহোক, .NET সংস্করণ 4.5 এবং 4.5.1 এ আর কোনও ফানসস বা ক্রিয়া যুক্ত করা হয়নি। এই ক্রমটি A170836 বা A170875 হয়ে যাবে ? সাথে থাকুন.
... কোন যুক্তি লাগে না এবং একটি শূন্য রিটার্ন টাইপ আছে?
আমি বিশ্বাস করি Action
এটির একটি সমাধান।
ফানকের সমস্ত প্রতিনিধি কমপক্ষে একটি প্যারামিটার নেন
এটা সত্যি না. এগুলি সকলেই কমপক্ষে একটি প্রকারের আর্গুমেন্ট গ্রহণ করে তবে সেই যুক্তিটি ফেরতের ধরণ নির্ধারণ করে।
সুতরাং Func<T>
কোনও পরামিতি গ্রহণ করে না এবং একটি মান দেয়। ব্যবহার করুন Action
বা Action<T>
যখন আপনি কোনও মান ফিরিয়ে দিতে চান না।
চেষ্টা করুন System.Func<T>
এবংSystem.Action
Converter<TInput, TOutput>
যা পরবর্তী সময়ের মতো ছিল Func<T, TResult>
। এটি এমন List<>.ConvertAll
পদ্ধতিতে ব্যবহৃত হয়েছিল যা প্রতিটি উপাদানকে List<>
অন্য কোনও বস্তুর উপরে প্রজেক্ট করে এবং সমস্ত "ফাংশন মান" কে একটি নতুন স্থানে স্থাপন করে List<>
। (পরে, এর Select
জন্য প্রায়শই লিনক ব্যবহার করা হত ))
মাঝেমধ্যে আপনি ইভেন্ট হ্যান্ডলিংয়ের জন্য একটি প্রতিনিধি লিখতে চাইবেন, এই ক্ষেত্রে আপনি যে দুটি প্যারামিটার থেকে উদ্ভূত হওয়া উচিত তা ছাড়াও System.EvenHandler<T>
স্পষ্টভাবে টাইপের একটি যুক্তি গ্রহণ করে যার সুবিধা নিতে পারেন । ইভেন্টহ্যান্ডাররা ফিরে আসবেobject
EventArgs
void
ফাংশন বডিটিতে এক-অফ কলব্যাক তৈরির জন্য টেস্টিংয়ের সময় আমি ব্যক্তিগতভাবে এই দরকারীটি পেয়েছি।
... কোন যুক্তি লাগে না এবং একটি শূন্য রিটার্ন টাইপ আছে?
আপনি যদি লিখতে থাকেন তবে System.Windows.Forms
আপনি এটি ব্যবহার করতে পারেন:
public delegate void MethodInvoker()
রিটার্ন এবং নন রিটার্ন ভ্যালু সাবরটাইনগুলি চাওয়ার একটি খুব সহজ উপায়। যথাক্রমে ফানক এবং অ্যাকশন ব্যবহার করছে । ( https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx এও দেখুন )
এই উদাহরণ চেষ্টা করুন
using System;
public class Program
{
private Func<string,string> FunctionPTR = null;
private Func<string,string, string> FunctionPTR1 = null;
private Action<object> ProcedurePTR = null;
private string Display(string message)
{
Console.WriteLine(message);
return null;
}
private string Display(string message1,string message2)
{
Console.WriteLine(message1);
Console.WriteLine(message2);
return null;
}
public void ObjectProcess(object param)
{
if (param == null)
{
throw new ArgumentNullException("Parameter is null or missing");
}
else
{
Console.WriteLine("Object is valid");
}
}
public void Main(string[] args)
{
FunctionPTR = Display;
FunctionPTR1= Display;
ProcedurePTR = ObjectProcess;
FunctionPTR("Welcome to function pointer sample.");
FunctionPTR1("Welcome","This is function pointer sample");
ProcedurePTR(new object());
}
}