আমি পিএইচপি তে জানি আপনি এইরকম কল করতে পারবেন:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
। নেট এ এটি সম্ভব?
আমি পিএইচপি তে জানি আপনি এইরকম কল করতে পারবেন:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
। নেট এ এটি সম্ভব?
উত্তর:
হ্যাঁ. আপনি প্রতিবিম্ব ব্যবহার করতে পারেন। এটার মতো কিছু:
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);
Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(TheCommandString, BindingFlags.NonPublic | BindingFlags.Instance); theMethod.Invoke(this, userParameters);
আপনি একটি গতিশীল পদ্ধতির প্রার্থনা করে প্রতিবিম্ব ব্যবহার করে কোনও শ্রেণীর উদাহরণের পদ্ধতিটি আহ্বান করতে পারেন:
মনে করুন যে আপনার কাছে আসল উদাহরণে (এটি) হ্যালো নামে একটি পদ্ধতি রয়েছে:
string methodName = "hello";
//Get the method information using the method info class
MethodInfo mi = this.GetType().GetMethod(methodName);
//Invoke the method
// (null- no parameter for the method call
// or you can pass the array of parameters...)
mi.Invoke(this, null);
class Program
{
static void Main(string[] args)
{
Type type = typeof(MyReflectionClass);
MethodInfo method = type.GetMethod("MyMethod");
MyReflectionClass c = new MyReflectionClass();
string result = (string)method.Invoke(c, null);
Console.WriteLine(result);
}
}
public class MyReflectionClass
{
public string MyMethod()
{
return DateTime.Now.ToString();
}
}
কিছুটা স্পর্শকাতর - আপনি যদি একটি সম্পূর্ণ এক্সপ্রেশন স্ট্রিংকে বিশ্লেষণ করতে এবং মূল্যায়ন করতে চান যা (নেস্টেড!) ফাংশনগুলি ধারণ করে, NCalc ( http://ncalc.codeplex.com/ এবং nuget) বিবেচনা করুন
যাত্রা। প্রকল্পের ডকুমেন্টেশন থেকে সামান্য পরিবর্তিত:
// the expression to evaluate, e.g. from user input (like a calculator program, hint hint college students)
var exprStr = "10 + MyFunction(3, 6)";
Expression e = new Expression(exprString);
// tell it how to handle your custom function
e.EvaluateFunction += delegate(string name, FunctionArgs args) {
if (name == "MyFunction")
args.Result = (int)args.Parameters[0].Evaluate() + (int)args.Parameters[1].Evaluate();
};
// confirm it worked
Debug.Assert(19 == e.Evaluate());
এবং EvaluateFunction
প্রতিনিধি মধ্যে আপনি আপনার বিদ্যমান ফাংশন কল করবে।
বাস্তবে আমি উইন্ডোজ ওয়ার্কফ্লো flow.৪ এ কাজ করছি এবং আমি কোনও সাফল্য ছাড়াই একটি স্টেটম্যাচিন থেকে কোনও পদ্ধতিতে একজন প্রতিনিধিকে পাস করার একটি উপায় খুঁজে পেয়েছি। আমি যে উপায়টি পেয়েছি তা হ'ল ডেলিগেট হিসাবে যে পদ্ধতিটি আমি পাস করতে চেয়েছিলাম তার নামের সাথে একটি স্ট্রিং পাস করা এবং স্ট্রিংটিকে পদ্ধতির অভ্যন্তরে একটি প্রতিনিধিতে রূপান্তর করা। খুব সুন্দর উত্তর। ধন্যবাদ। এই লিঙ্কটি দেখুন https://msdn.microsoft.com/en-us/library/53cz7sc6(v=vs.110).aspx
class Program
{
static void Main(string[] args)
{
string method = args[0]; // get name method
CallMethod(method);
}
public static void CallMethod(string method)
{
try
{
Type type = typeof(Program);
MethodInfo methodInfo = type.GetMethod(method);
methodInfo.Invoke(method, null);
}
catch(Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
Console.ReadKey();
}
}
public static void Hello()
{
string a = "hello world!";
Console.WriteLine(a);
Console.ReadKey();
}
}
সি # তে, আপনি ফাংশন পয়েন্টার হিসাবে প্রতিনিধি তৈরি করতে পারেন। ব্যবহারের তথ্যের জন্য নিম্নলিখিত এমএসডিএন নিবন্ধটি দেখুন:http://msdn.microsoft.com/en-us/library/ms173171(VS.80).aspx
public static void hello()
{
Console.Write("hello world");
}
/* code snipped */
public delegate void functionPointer();
functionPointer foo = hello;
foo(); // Writes hello world to the console.
public
।