আমার একটি সি ++ ব্যাকগ্রাউন্ড রয়েছে এবং আমি এই প্রশ্নের উত্তরগুলি সম্পূর্ণরূপে বুঝতে এবং সম্মত হয়েছি: কেন "নেমস্পেসটি স্ট্যান্ড ব্যবহার করা হচ্ছে"; খারাপ অনুশীলন বিবেচনা?
সুতরাং আমি আশ্চর্য হয়েছি যে, এখন সি # এর সাথে কিছু অভিজ্ঞতা পেয়েছি, আমি সেখানে ঠিক এর বিপরীতে দেখতে পাচ্ছি:
using Some.Namespace;আক্ষরিক অর্থেই সর্বত্র ব্যবহৃত হয়। আপনি যখনই কোনও প্রকারটি ব্যবহার শুরু করেন, আপনি প্রথমে এর নেমস্পেসের জন্য একটি ব্যবহার নির্দেশিকা যুক্ত করুন (যদি এটি ইতিমধ্যে না থাকে)। .csযে ফাইলটি শুরু হয়নি তা আমি মনে করতে পারি না using System; using System.Collections.Generic; using X.Y.Z; etc...। আসলে, আপনি যদি ভিজ্যুয়াল স্টুডিও উইজার্ডের মাধ্যমে কোনও নতুন ফাইল যুক্ত করেন তবে এটি স্বয়ংক্রিয়ভাবে সেখানে কিছু নির্দেশাবলীর সাহায্যে যুক্ত করে, যদিও আপনার এগুলির কোনও প্রয়োজনই হবে না। সুতরাং, সি ++ সম্প্রদায় থাকা অবস্থায় আপনি মূলত লিনচেড হন, সি # এমনকি এটি করতে উত্সাহ দেয়। অন্তত এটি আমার কাছে এটি প্রদর্শিত হয় appears
এখন, আমি বুঝতে পারি যে সি # এবং সি ++ তে নির্দেশিকা ব্যবহার করা ঠিক একই জিনিস নয়। এছাড়াও, আমি বুঝতে পারি যে using namespaceসি ++ এ আপনি যে নাস্তিক জিনিসগুলি করতে পারেন , তার মধ্যে একটি হ্যাডার ফাইলটিতে রেখে দেওয়া, শিরোনামের ফাইলগুলির ধারণার অভাবের কারণে সি # তে সমানভাবে বাজে কোনও সমকক্ষ নেই #include।
তবে, তাদের পার্থক্য থাকা সত্ত্বেও, সি # এবং সি ++ তে নির্দেশাবলী ব্যবহার করে একই উদ্দেশ্য উপস্থাপিত হয়, যা কেবল SomeTypeসমস্ত সময় টাইপ করতে হয় , বরং দীর্ঘায়িত Some.Namespace.SomeType(সি ++ এর ::পরিবর্তে .) দিয়ে থাকে। এবং এই একই উদ্দেশ্যে, বিপদটিও আমার কাছে একই রকম দেখা যাচ্ছে: নামকরণ সংঘর্ষগুলি।
সর্বোত্তম ক্ষেত্রে এটি সংকলনের ত্রুটির ফলস্বরূপ, সুতরাং আপনাকে "কেবল" এটি ঠিক করতে হবে। সবচেয়ে খারাপ ক্ষেত্রে, এটি এখনও সংকলন করে এবং কোডটি আপনি যা করতে চেয়েছিলেন তার চেয়ে আলাদাভাবে কাজ করে। সুতরাং আমার প্রশ্নটি হল: কেন (আপাতদৃষ্টিতে) সি # এবং সি ++ তে এত অসম বিবেচিত নির্দেশিকা ব্যবহার করছেন?
আমার কাছে থাকা একটি উত্তর সম্পর্কে কিছু ধারণা (যদিও এর মধ্যে কোনও সত্যই আমাকে সন্তুষ্ট করে না):
নেমস্পেসগুলি সি ++ (
stdবনামSystem.Collection.Generic) এর চেয়ে সি # তে অনেক বেশি দীর্ঘ এবং অনেক বেশি নেস্টেড থাকে । সুতরাং, এইভাবে কোডটি ডি-নয়েজ করার ক্ষেত্রে আরও আকাঙ্ক্ষা এবং আরও লাভ রয়েছে। তবে এটি সত্য হলেও, এই যুক্তিটি কেবল তখনই প্রয়োগ হয় যখন আমরা স্ট্যান্ডার্ড নেমস্পেসগুলি দেখি। কাস্টমগুলিতে সি # এবং সি ++ উভয়ই আপনার পছন্দ মতো কোনও সংক্ষিপ্ত নাম থাকতে পারে।নেমস্পেসগুলি সি ++ এর তুলনায় সি # তে অনেক বেশি "সূক্ষ্ম দানাদার" বলে মনে হয়। উদাহরণস্বরূপ, C ++ সমগ্র মান গ্রন্থাগার মধ্যে অন্তর্ভুক্ত করা হয়
std(প্লাস কিছু অতি ক্ষুদ্র নেস্টেড নামব্যবধান পছন্দchrono) যখন C # এর আপনি আছেনSystem.IO,System.Threading,System.Textইত্যাদি সুতরাং, নামকরণের দুর্ঘটনায় ঝুঁকি কম। তবে এটি কেবল অন্ত্রে অনুভূতি। আমি আসলে গণ্য করা হবে না কত নাম "আমদানি" সঙ্গেusing namespace stdএবংusing System। এবং আবার এটি সত্য হলেও, এই যুক্তিটি কেবলমাত্র স্ট্যান্ডার্ড নেমস্পেসের দিকে তাকালেই প্রযোজ্য। আপনার নিজস্বগুলি সি # এবং সি ++ উভয় ক্ষেত্রে আপনার ইচ্ছামতো সূক্ষ্ম দানাদার হিসাবে ডিজাইন করা যেতে পারে।
আরও কি যুক্তি আছে? আমি বিশেষত সত্যিকারের শক্ত তথ্যগুলিতে আগ্রহী (যদি থাকে তবে) এবং মতামতের মধ্যে এতটা নয়।
Ext(this T t, long l)যার মাধ্যমে এটি ডাকা হয় t.Ext(0)। এরপরে আপনি যদি কোনও এক্সটেনশন পদ্ধতি ধারণ করে এমন একটি নেমস্পেস যোগ করেন Ext(this T t, int i)তবে তার পরিবর্তে তাকে ডাকা হবে। তবে আমি সি # (এখনও) এর বিশেষজ্ঞ নই।