যথাযথ অপারেটর ওভারলোডিংয়ের সুস্পষ্ট উদাহরণ হ'ল এমন কোনও শ্রেণি যা সংখ্যাগুলি পরিচালনা করে। সুতরাং BigInt শ্রেণীর (যেমন Jalayn প্রস্তাব দেওয়া), জটিল সংখ্যার বা ম্যাট্রিক্স শ্রেণীর (যেমন Superbest প্রস্তাব দেওয়া) সমস্ত, একই অপারেশন যে সাধারণ সংখ্যা এতো গাণিতিক অপারেটর সম্মুখের সত্যিই ভাল মানচিত্র আছে যখন সময় অপারেশন (যেমন দ্বারা প্রস্তাবিত svick ) চমত্কারভাবে একটি উপসেট সম্মুখের ম্যাপ যারা অপারেশন।
সামান্য বেশি abstractly, অপারেটর যখন করণ ব্যবহৃত করা যেতে পারে মত সেট অপারেশন, তাই operator+
একটি হতে পারে ইউনিয়ন , operator-
হতে পারে একটি সম্পূরক , ইত্যাদি এই দৃষ্টান্ত যদিও প্রসারিত করতে শুরু হবে বিশেষ করে যদি আপনি সংযোজন বা একটি অপারেশন যা আইএসএন 'এর জন্য গুণ অপারেটর ব্যবহার টি পরিবর্তিত হবে না , যেমনটি আপনি আশা করতে পারেন।
সি # নিজেই অ-সংখ্যাযুক্ত অপারেটর ওভারলোডিংয়ের একটি দুর্দান্ত উদাহরণ রয়েছে । এটি ব্যবহার করে +=
এবং -=
যোগ করতে পারেন এবং বিয়োগ করতে প্রতিনিধিদের , অর্থাত্ রেজিস্টার করো এবং তাদের ডি নিবন্ধন। এটি ভালভাবে কাজ করে কারণ অপারেটররা যেমনটি আপনি প্রত্যাশা করতেন তেমন কাজ করে +=
এবং এর -=
ফলে আরও অনেক সংক্ষিপ্ত কোড আসে।
পিউরিস্টের জন্য, স্ট্রিং +
অপারেটরের সমস্যাগুলির মধ্যে একটি হ'ল এটি চলমান নয়। "a"+"b"
হিসাবে একই হয় না "b"+"a"
। স্ট্রিংগুলির জন্য আমরা এই ব্যতিক্রমটি বুঝতে পারি কারণ এটি এতটা সাধারণ, তবে আমরা কীভাবে বলতে পারি যে operator+
অন্য ধরণের ক্ষেত্রে ব্যবহার করা চলবে কিনা? বেশিরভাগ লোকেরা ধরে নেবে যে এটি হ'ল যদি না অবজেক্টটি স্ট্রিং-জাতীয় না হয় তবে আপনি কখনই সত্যই জানেন না যে লোকেরা কী ধারণা করবে।
স্ট্রিংয়ের মতো ম্যাট্রিকের ফাউবিলগুলিও বেশ সুপরিচিত। এটা সুস্পষ্ট যে Matrix operator* (double, Matrix)
এটি একটি স্কেলারের গুণ, যেখানে উদাহরণস্বরূপ Matrix operator* (Matrix, Matrix)
একটি ম্যাট্রিক্স গুণ (যেমন ডট-প্রোডাক্ট গুণের একটি ম্যাট্রিক্স) হবে।
একইভাবে প্রতিনিধিদের সাথে অপারেটরদের ব্যবহার গণিত থেকে এতটা স্পষ্টভাবে মুছে ফেলা হয়েছে যে আপনি এই ভুলগুলি করার সম্ভাবনা পাচ্ছেন না।
উল্লেখ্য, এ 2011 ACCU সম্মেলনে , রজার Orr & স্টিভ ভালবাসা একটি সেশন উপস্থাপন সমতা, মান এবং পরিচয় অনেক অর্থ কটাক্ষপাত - কিছু বস্তু অন্যদের তুলনায় বেশি সমান । তাদের স্লাইডগুলি ডাউনলোডযোগ্য , যেমন ভাসমান পয়েন্ট সমতা সম্পর্কে রিচার্ড হ্যারিসের পরিশিষ্ট । সারাংশ: খুব সতর্কতা অবলম্বন করা আবশ্যক সঙ্গে operator==
, এখানে ড্রাগন হতে!
অপারেটর ওভারলোডিং একটি অত্যন্ত শক্তিশালী শব্দার্থক কৌশল, তবে এটি অতিরিক্ত ব্যবহার করা সহজ। আদর্শভাবে আপনার কেবলমাত্র এমন পরিস্থিতিতে ব্যবহার করা উচিত যখন ওভারলোডেড অপারেটরের প্রভাব কী তা প্রসঙ্গ থেকে খুব স্পষ্ট হয়। অনেক উপায়ে a.union(b)
চেয়ে পরিষ্কার হয় a+b
, এবং a*b
হয় অনেক চেয়ে বেশি অস্পষ্ট a.cartesianProduct(b)
, বিশেষ করে থেকে কার্টিজিয়ান পণ্য এর ফলে হবে SetLike<Tuple<T,T>>
একটি বদলে SetLike<T>
।
অপারেটর ওভারলোডিংয়ের সাথে আসল সমস্যাগুলি তখন আসে যখন কোনও প্রোগ্রামার ধরে নেয় যে কোনও শ্রেণি একটি উপায়ে আচরণ করবে তবে এটি আসলে অন্যরকম আচরণ করে। এই ধরণের অর্থপূর্ণ সংঘর্ষটি আমি এড়াতে চেষ্টা করা জরুরী পরামর্শ দিচ্ছি।