উত্তর:
আপনি এরকম কিছু লিখতে পারেন:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
সম্পাদনা করুন: আপনি এমনকি কোনও এক্সটেনশন পদ্ধতিও করতে পারেন এবং এটি এটি ব্যবহার করতে পারেন
myObject.HasMethod("SomeMethod");
প্রতিচ্ছবি মাধ্যমে
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
অনুরূপ পদ্ধতি জন্য
GetType()
মত পদ্ধতি আছে GetProperties()
। এটি অ্যারে ফিরে আসছে PropertyInfo
। তবে আমি কীভাবে GetProperties()
পদ্ধতিটি ব্যবহার করতে পারি ?
এটি একটি পুরানো প্রশ্ন, কিন্তু আমি কেবল এটির মধ্যে দৌড়েছি।
Type.GetMethod(string name)
যদি সেই নামের সাথে একাধিক পদ্ধতি থাকে তবে একটি অ্যাম্পিগিউজম্যাচএক্সেপশন নিক্ষেপ করবে, সুতরাং আমরা সেই কেসটিকে আরও ভালভাবে পরিচালনা করব
public static bool HasMethod(this object objectToCheck, string methodName)
{
try
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
catch(AmbiguousMatchException)
{
// ambiguous means there is more than one result,
// which means: a method with that name does exist
return true;
}
}
এটির জন্য কোনও গতিশীল ধরণের ব্যবহার না করা ভাল এবং আপনার শ্রেণিটি একটি ইন্টারফেস প্রয়োগ করতে দেয়। তারপরে, আপনি রানটাইমে অন্য কোনও উপায়ে যে ইন্টারফেসটি প্রয়োগ করে তা পরীক্ষা করতে পারেন এবং এইভাবে, প্রত্যাশিত পদ্ধতি (বা সম্পত্তি) রয়েছে।
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if( x != null )
{
x.Somemethod();
}
আমি মনে করি এটিই একমাত্র সঠিক উপায়।
আপনি যে জিনিসটির কথা উল্লেখ করছেন সেটি হ'ল হাঁস-টাইপিং, যা এমন পরিস্থিতিতে তৈরিতে কার্যকর যেখানে আপনি ইতিমধ্যে জানেন যে বস্তুর পদ্ধতি রয়েছে তবে সংকলকটি এটি পরীক্ষা করতে পারে না। উদাহরণস্বরূপ এটি সিওএম আন্তঃবিদ্যুত পরিস্থিতিতে কার্যকর useful ( এই নিবন্ধটি পরীক্ষা করুন )
আপনি যদি উদাহরণস্বরূপ প্রতিবিম্বের সাথে হাঁস-টাইপিংয়ের মিশ্রণ করতে চান তবে আমি মনে করি আপনি হাঁস-টাইপিংয়ের লক্ষ্যটি হারিয়েছেন।
DynamicObject
?