যদি কোনও বস্তু সি # তে প্রদত্ত ইন্টারফেস প্রয়োগ করে তবে পরীক্ষার সহজ উপায় কী? ( জাভাতে এই প্রশ্নের উত্তর )
যদি কোনও বস্তু সি # তে প্রদত্ত ইন্টারফেস প্রয়োগ করে তবে পরীক্ষার সহজ উপায় কী? ( জাভাতে এই প্রশ্নের উত্তর )
উত্তর:
if (object is IBlah)
অথবা
IBlah myTest = originalObject as IBlah
if (myTest != null)
if (object is IBlah iblah) { iblah.SomeMethod(); }
সংকলনের সময় যদি আপনি ইন্টারফেস টাইপটি জানেন এবং আপনি যে ধরণের পরীক্ষা করছেন তার is
উদাহরণ রয়েছে তবে as
অপারেটরগুলি ব্যবহার করা সঠিক উপায়। এমন কিছু যা অন্য কেউ উল্লেখ করেছে বলে মনে হয় না Type.IsAssignableFrom
:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}
আমি মনে করি এটি ফিরে আসা অ্যারের মধ্য দিয়ে দেখার চেয়ে অনেক বেশি সুন্দর GetInterfaces
এবং ক্লাসগুলির জন্যও কাজ করার সুবিধা রয়েছে।
typeof(IList).IsAssignableFrom(someType)
ছাড়াই <>
।
উদাহরণস্বরূপ:
if (obj is IMyInterface) {}
শ্রেণীর জন্য:
typeof(MyClass).GetInterfaces()
ইন্টারফেস রয়েছে কিনা তা পরীক্ষা করুন ।
আপনি যদি চেকের পরে টাইপকাস্ট করা অবজেক্টটি ব্যবহার করতে চান:
যেহেতু সি # 7.0:
if (obj is IMyInterface myObj)
এই হিসাবে একই
IMyInterface myObj = obj as IMyInterface;
if (myObj != null)
নেট ডক্স দেখুন: # টাইপ প্যাটার্নের সাথে প্যাটার্নের মিলis
@ অ্যান্ড্রুকেন্নানের উত্তরের একটি পরিবর্তন আমি রানটাইমের সময় প্রাপ্ত ধরণের জন্য সম্প্রতি ব্যবহার করে শেষ করেছি:
if (serviceType.IsInstanceOfType(service))
{
// 'service' does implement the 'serviceType' type
}
"হ'ল" অপারেটরটি ব্যবহার করে পরীক্ষার পাশাপাশি, আপনার ভেরিয়েবলগুলি কোনও নির্দিষ্ট ইন্টারফেস প্রয়োগ করে তা নিশ্চিত করার জন্য আপনি আপনার পদ্ধতিগুলি সাজাতে পারেন:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
আমি নিশ্চিত নই যে এটির কোন সংস্করণটি কার্যকর হয়েছিল তাই এটি আপনার সংস্করণে কাজ না করে।
আমার জন্য যা কাজ করেছে তা হ'ল:
Assert.IsNotNull(typeof (YourClass).GetInterfaces().SingleOrDefault(i => i == typeof (ISomeInterface)));
সম্প্রতি আমি অ্যান্ড্রু কেন্নানের উত্তরটি ব্যবহার করার চেষ্টা করেছি এবং এটি কোনও কারণে আমার পক্ষে কার্যকর হয়নি। আমি পরিবর্তে এটি ব্যবহার করেছি এবং এটি কাজ করেছে (দ্রষ্টব্য: নাম স্থান লেখার প্রয়োজন হতে পারে)।
if (typeof(someObject).GetInterface("MyNamespace.IMyInterface") != null)
আমার একটি পরিস্থিতি ছিল যেখানে আমি কোনও পদ্ধতির সাথে ভেরিয়েবল পাস করছিলাম এবং নিশ্চিত ছিলাম না এটি ইন্টারফেস বা কোনও বস্তু হতে চলেছে কিনা।
লক্ষ্যগুলি ছিল:
আমি নিম্নলিখিতটি দিয়ে এটি অর্জন করেছি:
if(!typeof(T).IsClass)
{
// If your constructor needs arguments...
object[] args = new object[] { my_constructor_param };
return (T)Activator.CreateInstance(typeof(T), args, null);
}
else
return default(T);
এই কাজ করা উচিত :
MyInstace.GetType().GetInterfaces();
তবে খুব সুন্দর:
if (obj is IMyInterface)
বা এমনকি (খুব মার্জিত নয়):
if (obj.GetType() == typeof(IMyInterface))