এটি একটি খুব ভাল প্রশ্ন, কারণ আমি অনেকগুলি সি ++ বিকাশকারীকে ভয়ানক সি # কোড লিখতে দেখেছি।
সি # কে "ভাল সিনট্যাক্স সহ সি ++" না ভাবা ভাল is এগুলি বিভিন্ন ভাষা যা আপনার চিন্তাভাবনায় বিভিন্ন পদ্ধতির প্রয়োজন। সি ++ আপনাকে সিপিইউ এবং মেমরিটি কী করবে তা নিয়ে ক্রমাগত চিন্তা করতে বাধ্য করে। সি # এর মতো নয়। সি # বিশেষত এমনভাবে ডিজাইন করা হয়েছে যাতে আপনি সিপিইউ এবং মেমরির বিষয়ে চিন্তা করছেন না এবং পরিবর্তে আপনি যে ব্যবসায়িক ডোমেনের জন্য লিখছেন সে সম্পর্কে ভাবছেন ।
এর একটি উদাহরণ যা আমি দেখেছি তা হ'ল প্রচুর সি ++ বিকাশকারী লুপের জন্য ব্যবহার করতে পছন্দ করবে কারণ তারা ফোরচের চেয়ে দ্রুত। এটি সাধারণত সি # তে একটি খারাপ ধারণা কারণ এটি সংগ্রহের সম্ভাব্য প্রকারগুলিকে পুনরাবৃত্তি করা সীমাবদ্ধ করে (এবং তাই কোডটির পুনরায় ব্যবহারযোগ্যতা এবং নমনীয়তা)।
আমি মনে করি যে সি ++ থেকে সি # তে পুনরায় সমন্বয় করার সর্বোত্তম উপায় হ'ল ভিন্ন দৃষ্টিকোণ থেকে কোডিংয়ের চেষ্টা করা এবং চেষ্টা করা। প্রথমে এটি কঠোর হবে, কারণ কয়েক বছর ধরে আপনি নিজের কোডটি ফিল্টার করতে আপনার মস্তিস্কের "সিপিইউ এবং মেমরি কী করছেন" থ্রেডটি ব্যবহার করার জন্য পুরোপুরি অভ্যস্ত হয়ে উঠবেন। তবে সি # তে আপনার পরিবর্তে ব্যবসায়ের ডোমেনের মধ্যে থাকা বস্তুর মধ্যে সম্পর্কের কথা চিন্তা করা উচিত। "কম্পিউটার কী করছে" এর বিপরীতে "আমি কী করতে চাই"।
আপনি যদি তালিকার লুপের জন্য লেখার পরিবর্তে অবজেক্টের তালিকার সমস্ত কিছুতে কিছু করতে চান তবে একটি পদ্ধতি তৈরি করুন যা গ্রহণ করে IEnumerable<MyObject>
এবং একটি foreach
লুপ ব্যবহার করে ।
আপনার নির্দিষ্ট উদাহরণ:
আজীবন সংস্থানগুলি নিয়ন্ত্রনমূলক ক্লিনআপ (ফাইলগুলির মতো) প্রয়োজন হয় তা নিয়ন্ত্রণ করে। এটি হাতে ব্যবহার করা সহজ তবে যখন সম্পদের মালিকানা হস্তান্তরিত হচ্ছে তখন কীভাবে এটি সঠিকভাবে ব্যবহার করতে হবে [... বাইটউইন থ্রেড]? সি ++ তে আমি কেবল ভাগ করে নেওয়া পয়েন্টার ব্যবহার করব এবং ঠিক সময়ে সঠিক সময়ে এটি 'আবর্জনা সংগ্রহের' যত্ন নিতে দেব।
আপনার কখনই সি # তে এটি করা উচিত নয় (বিশেষত থ্রেডগুলির মধ্যে)। আপনার যদি কোনও ফাইলের কিছু করার দরকার হয় তবে এটি একবারে এক জায়গায় করুন। একটি র্যাপার ক্লাস লেখার জন্য এটি ঠিক (এবং প্রকৃতপক্ষে ভাল অনুশীলন) যা আপনার ক্লাসগুলির মধ্যে পাস করা নিয়ন্ত্রিত সংস্থান পরিচালিত করে, তবে চেষ্টা করুন এবং থ্রেডের মধ্যে একটি ফাইল পাস করবেন না এবং আলাদা ক্লাস লিখুন / পড়ুন / বন্ধ করুন / খুলুন। নিয়ন্ত্রণহীন সম্পদের মালিকানা ভাগ করবেন না। Dispose
ক্লিনআপ মোকাবেলা করতে প্যাটার্নটি ব্যবহার করুন ।
নির্দিষ্ট জেনেরিকের জন্য ওভাররাইডিং ফাংশনগুলির সাথে অবিচ্ছিন্ন লড়াই করা (আমি সি ++ তে আংশিক টেম্পলেট বিশেষায়নের মতো জিনিস পছন্দ করি)। আমি কি কেবল # # তে কোনও জেনেরিক প্রোগ্রামিংয়ের কোনও প্রচেষ্টা ত্যাগ করা উচিত? হয়তো জেনেরিকগুলি উদ্দেশ্য ভিত্তিতে সীমাবদ্ধ এবং কোনও নির্দিষ্ট ডোমেন ব্যতীত সেগুলি ব্যবহার করা সি-ইশ নয়?
সি # তে জেনারিকগুলি জেনেরিক হওয়ার জন্য ডিজাইন করা হয়েছে। জেনেরিকের বিশেষীকরণগুলি উত্পন্ন শ্রেণি দ্বারা পরিচালনা করা উচিত। List<T>
এটি একটি List<int>
বা একটি হলে কেন অন্যরকম আচরণ করা উচিত List<string>
? সমস্ত অপারেশন List<T>
জেনেরিক যাতে কোনও ক্ষেত্রে প্রয়োগ করা যায় List<T>
। আপনি যদি .Add
ক এর পদ্ধতির আচরণ পরিবর্তন করতে চান List<string>
তবে একটি উত্পন্ন শ্রেণি MySpecializedStringCollection : List<string>
বা একটি সমন্বিত শ্রেণি তৈরি করুন MySpecializedStringCollection : IList<string>
যা জেনেরিকে অভ্যন্তরীণভাবে ব্যবহার করে তবে বিভিন্ন উপায়ে কাজ করে। এটি আপনাকে লিসকোভ সাবস্টিটিউশন নীতি লঙ্ঘন করা এবং আপনার শ্রেণি ব্যবহার করে এমন অন্যদের স্ক্র্যাচ্যভাবে এড়াতে সহায়তা করে।
ম্যাক্রোর মতো কার্যকারিতা। যদিও একটি খারাপ ধারণা, সমস্যার কিছু ডোমেনের জন্য অন্য কোনও কার্যকারিতা নেই (যেমন বিবৃতিটির শর্তাধীন মূল্যায়ন, যেমন লগগুলির সাথে কেবলমাত্র ডিবাগ রিলিজে যাওয়া উচিত)। তাদের না থাকার অর্থ হ'ল আমাকে (শর্ত) {...} বয়লারপ্লেট আরও লাগানো দরকার এবং এটি এখনও পার্শ্বপ্রতিক্রিয়াগুলির প্রবণতার ক্ষেত্রে সমান নয়।
অন্যরা যেমন বলেছে, এটি করার জন্য আপনি প্রিপ্রসেসর কমান্ডগুলি ব্যবহার করতে পারেন। বৈশিষ্ট্যগুলি আরও ভাল। কোনও শ্রেণীর জন্য "মূল" কার্যকারিতা নয় এমন জিনিসগুলি হ্যান্ডেল করার সাধারণ বৈশিষ্ট্যগুলির মধ্যে সর্বোত্তম উপায়।
সংক্ষেপে, সি # লেখার সময়, মনে রাখবেন যে আপনার ব্যবসায়ের ডোমেনটি সম্পর্কে সিপিইউ এবং স্মৃতি সম্পর্কে নয় বরং পুরোপুরি চিন্তা করা উচিত। আপনি পরে নিখুত করতে প্রয়োজনে , কিন্তু আপনার কোড ব্যবসায় নীতি আপনি মানচিত্রে করার চেষ্টা করছেন মধ্যে সম্পর্ক প্রতিফলিত হওয়া উচিত।
C#
অন্যান্য কোড উত্পন্ন করতে ব্যবহার করুন । আপনি একটিCSV
বা একটি পড়তে পারেনXML
বা ইনপুট হিসাবে আপনি কী ফাইল করেছেন এবং একটিC#
বা একটিSQL
ফাইল তৈরি করতে পারেন। এটি কার্যক্ষম ম্যাক্রোগুলি ব্যবহারের চেয়ে আরও শক্তিশালী হতে পারে।