ইতিহাসের সাথে পরিচিতদের পক্ষে এটি সুপরিচিত যে সি # এবং .NET কাঠামোটি মূলত "জাফার মতো বোধ করার জন্য ডেলফি পুনরায় লেখা হয়েছিল" হিসাবে ডেলফির পিছনে প্রধান বিকাশকারী, আন্ডারস হেজলসবার্গের দ্বারা নির্মিত। তখন থেকেই বিষয়গুলি বেশ খানিকটা দূরে সরে গিয়েছিল, তবে এর মিলগুলির প্রথমদিকে এতটাই স্পষ্ট ছিল যে কিছু গুরুতর জল্পনাও ছিল যে। নেট আসলে মূলত বোরল্যান্ডের পণ্য।
তবে আমি ইদানীং কিছু। নেট স্টাফগুলিতে নজর রেখেছি এবং ডেলফির সবচেয়ে আকর্ষণীয় এবং দরকারী বৈশিষ্ট্যগুলি পুরোপুরি অনুপস্থিত বলে মনে হচ্ছে: প্রথম শ্রেণির ডেটা ধরণের হিসাবে শ্রেণীর ধারণা। এটির সাথে পরিচিত নয় তাদের TClassজন্য, Typeপ্রকারটি .NET টাইপের অনুরূপ শ্রেণীর একটি রেফারেন্স উপস্থাপন করে । কিন্তু যেখানে নেট নেট Typeপ্রতিবিম্বের জন্য ব্যবহার করে, ডেল্ফি TClassভাষার একটি গুরুত্বপূর্ণ অন্তর্নির্মিত অংশ হিসাবে ব্যবহার করে। এটি বিভিন্ন দরকারী আইডিয়ামগুলির জন্য অনুমতি দেয় যা কেবল এটি ব্যতীত অস্তিত্ব থাকতে পারে না এবং অস্তিত্ব রাখতে পারে না যেমন শ্রেণীর সাব টাইপ ভেরিয়েবল এবং ভার্চুয়াল শ্রেণির পদ্ধতিগুলি।
প্রতিটি ওও ভাষার ভার্চুয়াল পদ্ধতি রয়েছে, যার মধ্যে বিভিন্ন শ্রেণী বিভিন্ন উপায়ে কোনও পদ্ধতির একই মৌলিক ধারণাটি প্রয়োগ করে এবং তারপরে ডান পদ্ধতিটি ডাকা হয় যখন অব টাইম অবজেক্টের প্রকৃত ধরণের উপর ভিত্তি করে ডাকে time ডেলফি ক্লাসে এই ধারণাটি প্রসারিত করে: যদি আপনার কাছে একটি নির্দিষ্ট শ্রেণির সাব টাইপ হিসাবে সংজ্ঞায়িত কোনও টিসি ক্লাসের রেফারেন্স থাকে (অর্থাত্ class of TMyClassভেরিয়েবলটি উত্তরাধিকার সূত্রে প্রাপ্ত যে কোনও শ্রেণীর রেফারেন্স গ্রহণ TMyClassকরতে পারে তবে উত্তরাধিকারের বাইরে কিছু নয়) যার সাথে শ্রেণি-স্কোপ ভার্চুয়াল পদ্ধতিগুলি সংযুক্ত রয়েছে এটি, তাদের ক্লাসের প্রকৃত ধরণ ব্যবহার করে উদাহরণ ছাড়াই কল করা যেতে পারে। এই প্যাটার্নটি কনস্ট্রাক্টরগুলিতে প্রয়োগ করা একটি কারখানার বাস্তবায়নকে তুচ্ছ করে তোলে, উদাহরণস্বরূপ।
NET- তে সমতুল্য কিছু নেই বলে মনে হচ্ছে। শ্রেণি রেফারেন্সগুলি (এবং বিশেষত ভার্চুয়াল কনস্ট্রাক্টর এবং অন্যান্য ভার্চুয়াল শ্রেণীর পদ্ধতিগুলি) যেমন দরকারী, তারা কেন বাদ পড়েছে সে সম্পর্কে কেউ কি কিছু বলেছে?
নির্দিষ্ট উদাহরণ
ফর্ম Deserialization
ডেল্ফি ভিসিএল DFMফর্ম্যাটগুলিতে সংরক্ষণ করে, একটি ডিএনএসএল একটি উপাদান ক্রমবিন্যাস বর্ণনা করার জন্য। ফর্ম রিডার যখন ডিএফএম ডেটা বিশ্লেষণ করে তখন এটি এমনভাবে বর্ণনা করা অবজেক্টগুলিতে চলে:
object Name: ClassName
property = value
property = value
...
object SubObjectName: ClassName
...
end
end
আকর্ষণীয় জিনিস এখানে ClassNameঅংশ। প্রতিটি উপাদান শ্রেণি সময়কালে TClassউপাদান স্ট্রিমিং সিস্টেমের সাথে এটি নিবন্ধভুক্ত করে initialization(স্ট্যাটিকের সাথে সাথে ঘটনার গ্যারান্টিযুক্ত স্ট্যাটিক নির্মাতারা মনে করুন think) এটি প্রতিটি শ্রেণিকে একটি স্ট্রিং-> টিসিগ্লাস হ্যাশম্যাপে নিবন্ধ হিসাবে শ্রেণীর নামের সাথে নিবন্ধভুক্ত করে।
প্রতিটি উপাদান অবতরণ করে TComponent, যার একটি ভার্চুয়াল নির্মাতা রয়েছে যা একটি একক আর্গুমেন্ট গ্রহণ করে Owner: TComponent,। যে কোনও উপাদান এই নির্মাতাকে নিজের আরম্ভের জন্য সরবরাহ করতে ওভাররাইড করতে পারে। যখন ডিএফএম পাঠক একটি শ্রেণীর নাম পড়েন, তখন এটি উপরে বর্ণিত হ্যাশম্যাপে নামটি সন্ধান করে এবং সংশ্লিষ্ট বর্গ রেফারেন্সটি পুনরুদ্ধার করে (বা এটি না থাকলে একটি ব্যতিক্রম উত্থাপন করে), তারপরে এটি ভার্চুয়াল TComp घटक নির্মাণকারীকে কল করে, যা ভাল হিসাবে পরিচিত কারণ রেজিস্ট্রেশন ফাংশনটি এমন একটি শ্রেণি রেফারেন্স নেয় যা টিসিম্পোনেন্ট থেকে অবতরণ করতে হয় এবং আপনি সঠিক ধরণের কোনও অবজেক্টের সাথে শেষ করেন।
এটির অভাবে, উইনফর্মস সমতুল্য হ'ল ... ভাল করে বলার জন্য এটি একটি বড় জগাখিচুড়ি, কোনও নতুন নেট নেটওয়ার্কের নিজস্ব ফর্ম (ডি) সিরিয়ালাইজেশনটিকে পুরোপুরি পুনরায় বাস্তবায়নের জন্য প্রয়োজন। আপনি যখন এটি সম্পর্কে ভাবেন এটি কিছুটা হতবাক; যেহেতু সিএলআর থাকার পুরো বিষয়টিটি হ'ল একাধিক ভাষাকে একই বেসিক অবকাঠামো ব্যবহার করতে দেওয়া হয়, তাই কোনও ডিএফএম-স্টাইল সিস্টেমটি সঠিক ধারণা অর্জন করতে পারে।
extensibility
আমি রচনা করা একটি চিত্র পরিচালক পরিচালক শ্রেণীর একটি ডেটা উত্স সরবরাহ করা যেতে পারে (যেমন আপনার চিত্র ফাইলের পথ) এবং তারপরে আপনি যদি সংগ্রহের মধ্যে নেই এমন একটি নাম পুনরুদ্ধার করার চেষ্টা করেন তবে ডেটা উত্সে উপলভ্য হন তবে নতুন চিত্র অবজেক্টগুলি স্বয়ংক্রিয়ভাবে লোড করুন। এটিতে একটি বর্গ ভেরিয়েবল class ofবেস ইমেজ শ্রেণি হিসাবে টাইপ করা হয়, যে কোনও নতুন বস্তুর তৈরির শ্রেণি উপস্থাপন করে। এটি একটি ডিফল্ট সাথে আসে, তবে কয়েকটি পয়েন্ট রয়েছে, বিশেষ উদ্দেশ্যে নতুন চিত্র তৈরি করার সময়, চিত্রগুলি বিভিন্ন উপায়ে সেট আপ করা উচিত। (একটি আলফা চ্যানেল ব্যতীত এটি তৈরি করা, স্প্রাইটের আকার ইত্যাদি নির্দিষ্ট করার জন্য একটি পিএনজি ফাইল থেকে বিশেষ মেটাডেটা উদ্ধার করা)
এটি বিস্তৃত পরিমাণে কনফিগারেশন কোড লিখে এবং সমস্ত বিকল্পের বিশেষ বিকল্পগুলিতে একটি নতুন অবজেক্ট তৈরি করে শেষ করে দেওয়া যেতে পারে ... বা আপনি কেবল ভিত্তি চিত্রের শ্রেণীর একটি সাবক্লাস তৈরি করতে পারেন যা ভার্চুয়াল পদ্ধতিতে ওভাররাইড করে যেখানে প্রশ্নের দিকটি কনফিগার হয়ে যায় এবং তারপরে চেষ্টা করুন / অবশেষে ব্লকটি "ডিফল্ট শ্রেণি" সম্পত্তি হিসাবে প্রয়োজন হিসাবে অস্থায়ীভাবে প্রতিস্থাপন করুন এবং তারপরে পুনরুদ্ধার করুন। শ্রেণি রেফারেন্স ভেরিয়েবলগুলির সাথে এটি করা অনেক সহজ এবং এটি জেনেরিকের পরিবর্তে কিছু করা যায় না।
TClassকয়েকটি নমুনা কোড সহ আপনি যেখানে একটি কার্যকর সেখানে দুটি বা কংক্রিটের উদাহরণ সরবরাহ করতে পারেন ? সম্পর্কে আমার অভিশপ্ত ইন্টারনেট গবেষণায় TClass, আমি এটি TClassপরামিতি হিসাবে প্রায় পাস হতে পারে সন্ধান করছি । জেনারিক্স ব্যবহার করে .NET এ এটি করা হয়। কারখানার পদ্ধতিগুলি সহজেই নেটগুলিতে চিহ্নিত করা staticহয় এবং কার্যকর করার জন্য কোনও শ্রেণীর উদাহরণ প্রয়োজন হয় না।
TClassএকটি মৌলিক ভাষা বৈশিষ্ট্য যার জন্য সংকলক সমর্থন প্রয়োজন। আপনি নিজের ভাষা না লিখে "নিজের নিজের লিখতে" পারবেন না, এবং নেট জন্যও এটি যথেষ্ট হবে না কারণ বস্তুর মডেলটি সিএলআর দ্বারা সংজ্ঞায়িত করা হয়েছে, পৃথক ভাষা দ্বারা নয়। এটি এমন কিছু যা আক্ষরিক অর্থেই নেট নেট ফ্রেমওয়ার্কের অংশ হওয়া দরকার বা এটি বিদ্যমান থাকতে পারে না।