স্থির পদ্ধতিগুলি কেন ওভাররাইডযোগ্য হতে সক্ষম হবে না?


13

এই প্রশ্নের উত্তরে , সাধারণ wasকমত্যটি ছিল যে স্থির পদ্ধতিগুলি ওভাররাইড করা বোঝায় না (এবং এভাবে সি # তে স্থির ফাংশনগুলি ভার্চুয়াল বা বিমূর্ত হতে পারে না)। যদিও এটি কেবল সি # তে ঘটনা নয়; জাভাও এটি নিষিদ্ধ করে এবং সি ++ এটি পছন্দ করে না। যাইহোক, আমি স্থির ক্রিয়াকলাপগুলির অনেকগুলি উদাহরণ বিবেচনা করতে পারি যা আমি একটি শিশু শ্রেণিতে ওভাররাইড করতে চাই (উদাহরণস্বরূপ, কারখানার পদ্ধতি)। তত্ত্ব অনুসারে, তাদের চারপাশে যাওয়ার উপায় রয়েছে, সেগুলির কোনওটিই পরিষ্কার বা সরল নয়।

স্থির ক্রিয়াকলাপগুলি ওভাররাইডযোগ্য হওয়া উচিত নয় কেন?


4
ডেলফি ক্লাস পদ্ধতিগুলি সমর্থন করে যা স্থির পদ্ধতির সাথে বেশ মিল এবং এগুলি ওভাররাইড করা যায়। তারা একটি selfপয়েন্টার পাস করে যা ক্লাসের দিকে নির্দেশ করে, শ্রেণীর উদাহরণ নয়।
কোডসইনচওস

স্থির একটি সংজ্ঞা: পরিবর্তন অভাব। আমি কেন আগ্রহী যে আপনি কেন এমন একটি ক্রিয়াকলাপ স্থির করেছিলেন যা আপনি ওভাররাইড করতে চান।
জেফো

4
@ জেফো: স্ট্যাটিক সদস্য ফাংশনের অনন্য শব্দার্থবিজ্ঞানের সাথে "স্ট্যাটিক" এর ইংরেজি সংজ্ঞার একেবারেই কোনও যোগসূত্র নেই।
অরবিটে হালকাতা রেস

5
আপনার প্রশ্নটি হল " স্থির পদ্ধতিগুলি কেন একক-ভার্চুয়াল প্রেরণের পরিবর্তে স্ট্যাটিকালি-টাইপড প্রেরণ ব্যবহার করা উচিত ?" আপনি যখন প্রশ্নটি বাক্যটি করেন তখন আমি মনে করি এটি নিজের উত্তর দেয়।
এরিক লিপার্ট

1
@ এরিকলিপার্ট প্রশ্নটিকে আরও উত্তম হিসাবে বলা যেতে পারে "ক্লাস পদ্ধতির পরিবর্তে সি # কেন স্থির পদ্ধতি প্রস্তাব করে?", তবে এটি এখনও একটি বৈধ প্রশ্ন।
কোডসইনচওস

উত্তর:


13

স্থির পদ্ধতিগুলির সাথে ওভাররাইড প্রক্রিয়াটির যথাযথ নিয়ন্ত্রণ সরবরাহ করার কোনও বিষয় নেই।

সাধারণ শ্রেণি / দৃষ্টান্ত ভার্চুয়াল পদ্ধতি প্রক্রিয়াটি নীচে ওভাররাইডগুলির সূক্ষ্মভাবে সুরক্ষিত নিয়ন্ত্রণের জন্য অনুমতি দেয়: প্রতিটি আসল বস্তু হ'ল এক শ্রেণির উদাহরণ। এই শ্রেণিটি ওভাররাইডগুলির আচরণ নির্ধারণ করে; এটি ভার্চুয়াল পদ্ধতিতে সর্বদা প্রথম ক্র্যাক পায়। এরপরে এটি বাস্তবায়নের জন্য সঠিক সময়ে পিতামাতাকে কল করতে পছন্দ করতে পারে। তারপরে প্রতিটি প্যারেন্ট পদ্ধতিতে তার পিতামাতার পদ্ধতিটি শুরু করার পালা আসে। এর ফলে পিতামাতাদের অনুরোধগুলির একটি দুর্দান্ত ক্যাসকেডের ফলস্বরূপ, যা কোডটির পুনরায় ব্যবহারের একটি ধারণাটি উপস্থাপন করে যা অবজেক্ট অরিয়েন্টেশনটির জন্য পরিচিত। (এখানে বেস / সুপার ক্লাসের কোডটি তুলনামূলকভাবে জটিল উপায়ে পুনরায় ব্যবহার করা হচ্ছে; ওওপি-তে কোড পুনরায় ব্যবহারের আরেকটি অরথোগোনাল ধারণাটি কেবল একই শ্রেণীর একাধিক অবজেক্টে রয়েছে))

বেস ক্লাসগুলি বিভিন্ন সাবক্লাস দ্বারা পুনরায় ব্যবহার করতে পারে এবং প্রতিটি স্বাচ্ছন্দ্যে সহাবস্থান করতে পারে। প্রতিটি শ্রেণি যা বস্তুগুলিকে তার নিজস্ব আচরণ নির্দেশ করে শান্তিতে এবং একই সাথে অন্যের সাথে সহাবস্থান করতে ব্যবহৃত হয়। ক্লায়েন্টটি কোন আচরণটি চায় তার উপর নিয়ন্ত্রণ করে এবং কখন কোন শ্রেণিটি বেছে নিয়ে কোনও বস্তুকে তাত্ক্ষণিকভাবে ব্যবহার করতে এবং পছন্দসইভাবে অন্যের কাছে চলে যায় choosing

(এটি একটি নিখুঁত প্রক্রিয়া নয়, যেহেতু কেউ সর্বদা সমর্থিত নয় এমন ক্ষমতাগুলি সনাক্ত করতে পারে তবে অবশ্যই কারখানা পদ্ধতি এবং নির্ভরতা ইনজেকশনের মতো নিদর্শনগুলি শীর্ষে স্তরযুক্ত))

সুতরাং, যদি আমরা স্ট্যাটিক্সের জন্য অন্য কোনও পরিবর্তন না করে ওভাররাইডের ক্ষমতা তৈরি করি তবে আমাদের ওভাররাইডগুলি অর্ডার করতে অসুবিধা হবে। ওভাররাইডের প্রয়োগযোগ্যতার জন্য একটি সীমাবদ্ধ প্রসঙ্গটি সংজ্ঞায়িত করা শক্ত হবে, সুতরাং আপনি স্থানীয়ভাবে বস্তুর মতো স্থানীয়ভাবে ওভাররাইড পাবেন না। আচরণে স্যুইচ করার কোনও উদাহরণ নেই। সুতরাং, কেউ যদি স্থির পদ্ধতিটিকে অন্য শ্রেণীর দ্বারা ওভাররাইড করা হয়েছে বলে ডাকে, ওভাররাইডটি নিয়ন্ত্রণ পাওয়া উচিত কি না? যদি এমন একাধিক ওভাররাইড থাকে তবে প্রথমে কারা নিয়ন্ত্রণ পান? দ্বিতীয়? উদাহরণস্বরূপ অবজেক্টের ওভাররাইডগুলির সাথে, এই সমস্ত প্রশ্নের অর্থপূর্ণ এবং যুক্তিসঙ্গত উত্তর রয়েছে, তবে স্ট্যাটিক্সের সাথে তারা তা দেয় না।

স্ট্যাটিক্সের জন্য ওভাররাইডগুলি যথেষ্ট বিশৃঙ্খলাযুক্ত হবে এবং এর আগে এমন কিছু আগেও হয়ে গেছে।

উদাহরণস্বরূপ, ম্যাক ওএস সিস্টেম 7 এবং পূর্বে অপারেটিং সিস্টেমের আগে অ্যাপ্লিকেশন-তৈরি সিস্টেম কলগুলির নিয়ন্ত্রণ পেয়ে সিস্টেমটি প্রসারিত করার জন্য একটি ট্র্যাপ প্যাচিং প্রক্রিয়া ব্যবহৃত হয়েছিল। আপনি সিস্টেম কল প্যাচ টেবিলটি ফাংশন পয়েন্টারগুলির একটি অ্যারে হিসাবে ভাবতে পারেন , উদাহরণস্বরূপ অবজেক্টগুলির জন্য অনেকগুলি যেমন একটি একক গ্লোবাল টেবিল ছাড়া।

এটি ট্র্যাপার প্যাচিংয়ের নিরবচ্ছিন্ন প্রকৃতির কারণে প্রোগ্রামারদের জন্য অবিচ্ছিন্ন শোকের কারণ হয়েছিল। যে জালটি সর্বশেষে ফাঁদ পেতে পেল সে মূলত জিতল, এমনকি তারা না চাইলেও জিতেছে। ট্র্যাপের প্রতিটি প্যাচার পূর্ববর্তী ট্র্যাপ মানটি বাছাই করে পিতামাতার কল সাধ্যের জন্য, যা অত্যন্ত ভঙ্গুর ছিল। ট্র্যাপ প্যাচ অপসারণ করে বলুন, যখন আপনার আর কোনও সিস্টেম কল সম্পর্কে জানার দরকার পড়েনি তখন খারাপ ফর্ম হিসাবে বিবেচিত হত কারণ আপনার প্যাচ সরিয়ে দেওয়ার জন্য আপনার কাছে সত্যিকারের তথ্য নেই (যদি আপনি এটি করেন তবে আপনি অনুসরণ করা অন্য কোনও প্যাচও আনপ্যাচ করবেন) আপনি).

এটি বলার অপেক্ষা রাখে না যে স্ট্যাটিক্সের ওভাররাইডগুলির জন্য একটি প্রক্রিয়া তৈরি করা অসম্ভব হবে, তবে আমি সম্ভবত এর পরিবর্তে যা করতে পছন্দ করব তা হ'ল স্থির ক্ষেত্রগুলি এবং স্থির পদ্ধতিগুলি উদাহরণস্বরূপ ক্ষেত্রগুলিকে এবং মেটাক্লাসগুলির উদাহরণ পদ্ধতিগুলিতে পরিণত করা, যাতে স্বাভাবিক বস্তু ওরিয়েন্টেশন কৌশলগুলি তখন প্রয়োগ করা হবে। নোট করুন যে সিস্টেমগুলিও এটি করে: সিএসই 341: ছোট্টকল ক্লাস এবং মেটাক্লাস ; আরও দেখুন: জাভা এর স্ট্যাটিকের সমকক্ষ সমতুল্য কী?


আমি এটি বলার চেষ্টা করছি যে এটি যুক্তিসঙ্গতভাবে আরও ভালভাবে কাজ করতে আপনাকে কিছু গুরুতর ভাষা বৈশিষ্ট্য নকশা করতে হবে। উদাহরণস্বরূপ, একটি নির্বোধ দৃষ্টিভঙ্গি করা হয়েছিল, পাশাপাশি দুর্বল হয়েছিলেন, তবে খুব সমস্যাযুক্ত ছিল এবং যুক্তিযুক্তভাবে (অর্থাত্ আমি তর্ক করব) অসম্পূর্ণ এবং অ্যাবস্ট্রাকশন ব্যবহার করা কঠিন সরবরাহ করে স্থাপত্যগতভাবে ত্রুটিযুক্ত।

চমত্কারভাবে কাজ করার জন্য আপনি স্ট্যাটিক ওভাররাইড বৈশিষ্ট্যটি ডিজাইনিংয়ের কাজটি সম্পন্ন করে সবেমাত্র আপনি মেটাচ্লাসের কিছু ফর্ম উদ্ভাবন করেছেন যা শ্রেণিভিত্তিক পদ্ধতিতে / ওওপির একটি প্রাকৃতিক বর্ধন। সুতরাং, এটি না করার কোনও কারণ নেই - এবং কিছু ভাষা আসলে করে। সম্ভবত এটি বেশ কয়েকটি সীমানার প্রয়োজন যা বেশ কয়েকটি ভাষা না করাকে পছন্দ করে।


যদি আমি সঠিকভাবে বুঝতে পারি: তাত্ত্বিকভাবে আপনি এই জাতীয় কিছু করতে চান বা করবেন কিনা এটি বিষয় নয়, তবে আরও প্রোগ্রামিকভাবে, এর বাস্তবায়ন কঠোর এবং প্রয়োজনীয়ভাবে কার্যকর নয় কি?
পিক্সেলআর্টড্রাগন

@ গারান, আমার সংযোজন দেখুন।
এরিক tদ

1
আমি অর্ডারিং যুক্তি কিনছি না; আপনি যে ক্লাসটি পদ্ধতিটি কল করেছিলেন তার দ্বারা সরবরাহিত পদ্ধতিটি পাবেন (বা প্রথম সুপারক্লাস যা আপনার ভাষার পছন্দসই রৈখিকতা অনুসারে একটি পদ্ধতি সরবরাহ করে)।
hobbs

1
@ পিয়ারআরলাউড: তবে this.instanceMethod()গতিশীল রেজোলিউশন রয়েছে, সুতরাং যদি self.staticMethod()একই রেজোলিউশন হয়, যেমন ডায়নামিক হয়, তবে এটি আর স্থির পদ্ধতি নয় method
Jörg ডব্লু মিট্টাগ

1
স্থির পদ্ধতির জন্য ওভাররাইডিং শব্দার্থবিজ্ঞান যুক্ত করা দরকার। একটি হাইপোথটিকাল জাভা + মেটাক্লাসগুলিতে কিছু যুক্ত করার দরকার নেই! আপনি কেবল ক্লাস অবজেক্ট এবং স্ট্যাটিক পদ্ধতিগুলি পরে নিয়মিত উদাহরণ পদ্ধতিতে পরিণত হন। আপনাকে ভাষায় কিছু যুক্ত করতে হবে না, কারণ আপনি কেবল ইতিমধ্যে ধারণাগুলি ব্যবহার করেন: বস্তু, শ্রেণী এবং উদাহরণ পদ্ধতি। বোনাস হিসাবে, আপনি আসলে ভাষা থেকে স্থির পদ্ধতিগুলি সরিয়ে ফেলতে পারেন ! আপনি একটি ধারণা এবং ভাষা থেকে জটিলতা সরিয়ে একটি বৈশিষ্ট্য যুক্ত করতে সক্ষম হন !
জার্গ ডব্লু মিট্টাগ

9

ওভাররাইডিং ভার্চুয়াল প্রেরণের উপর নির্ভর করে: thisকোন পদ্ধতিটি কল করতে হবে তা স্থির করতে আপনি পরামিতিটির রানটাইম টাইপ ব্যবহার করেন । একটি স্থির পদ্ধতির কোনও thisপ্যারামিটার নেই, তাই প্রেরণের মতো কিছুই নেই।

কিছু ভাষাগুলি, উল্লেখযোগ্যভাবে ডেল্ফি এবং পাইথনগুলির একটি "ইন-বিউন্ড" সুযোগ রয়েছে যা এটির জন্য অনুমতি দেয়: শ্রেণির পদ্ধতিগুলি। একটি শ্রেণিবদ্ধ পদ্ধতি কোনও সাধারণ উদাহরণ পদ্ধতি নয়, তবে এটি স্থিতিশীলও নয়; এটি একটি selfপরামিতি গ্রহণ করে (মজাদারভাবে, উভয় ভাষাই thisপ্যারামিটারকে কল করে self) এটি সেই ধরণের কোনও উদাহরণের চেয়ে অবজেক্ট টাইপের নিজেই একটি রেফারেন্স। সেই মানটি সহ, এখন আপনার কাছে ভার্চুয়াল প্রেরণটি চালানোর জন্য এক প্রকারের উপস্থিত রয়েছে।

দুর্ভাগ্যক্রমে, জেভিএম বা সিএলআর উভয়েরই তুলনামূলক কিছু নেই।


এটি কি সেই ভাষাগুলি ব্যবহার করে selfযেগুলি অধ্যয়নযোগ্য পদ্ধতিগুলির সাথে প্রকৃত, ইনস্ট্যান্টেটেড অবজেক্টস হিসাবে ক্লাস রয়েছে - অবশ্যই স্মার্টটাক, রুবি, ডার্ট, অবজেক্টিভ সি, সেল্ফ, পাইথন? সি ++ এর পরে নেওয়া ভাষাগুলির সাথে তুলনা করুন, যেখানে ক্লাসগুলি প্রথম শ্রেণীর অবজেক্ট নয়, এমনকি কিছু প্রতিবিম্ব অ্যাক্সেস রয়েছে কিনা?
জেরি 101

কেবল পরিষ্কার করে বলার জন্য, আপনি কি বলছেন যে পাইথন বা ডেলফিতে আপনি ক্লাসের পদ্ধতিগুলিকে ওভাররাইড করতে পারেন?
এরিক tদ

পাইথনে @ এরিকইড্ট, প্রায় সব কিছু ওভাররাইডযোগ্য। ডেলফিতে, virtualউদাহরণস্বরূপের পদ্ধতিগুলির মতো একটি বর্গীয় পদ্ধতি স্পষ্টভাবে ঘোষণা করা যেতে পারে এবং তারপরে একটি বংশধর শ্রেণিতে ওভাররাইড করা যেতে পারে ।
ম্যাসন হুইলারের 21

সুতরাং, এই ভাষাগুলি মেটাক্লাসগুলির একধরণের ধারণা সরবরাহ করছে, না?
এরিক tদ

1
@ এরিকইড্ট পাইথনের "সত্য" মেটাক্লাস রয়েছে। ডেলফিতে, শ্রেণি রেফারেন্সটি একটি বিশেষ ডেটা ধরণের, নিজের এবং নিজের শ্রেণীর নয়।
ম্যাসন হুইলার

3

আপনি জিজ্ঞাসা করুন

স্থির ক্রিয়াকলাপগুলি ওভাররাইডযোগ্য হওয়া উচিত নয় কেন?

আমি জিজ্ঞাসা করি

আপনি যে ফাংশনগুলিকে ওভাররাইড করতে চান তা স্থির হতে হবে কেন?

কিছু নির্দিষ্ট ভাষা আপনাকে স্ট্যাটিক পদ্ধতিতে শো শুরু করতে বাধ্য করে। তবে এর পরে আপনি বাস্তবে কোনও স্থিতিশীল পদ্ধতি ছাড়াই দুর্দান্ত অনেকগুলি সমস্যার সমাধান করতে পারেন।

কিছু লোক স্থির পদ্ধতিগুলি যে কোনও সময় ব্যবহার করতে পছন্দ করে সেখানে কোনও বস্তুর মধ্যে রাষ্ট্রের উপর নির্ভরতা নেই। কিছু লোক অন্যান্য বস্তুর নির্মাণের জন্য স্থিতিশীল পদ্ধতি ব্যবহার করতে পছন্দ করে। কিছু লোক যথাসম্ভব স্থির পদ্ধতি এড়াতে পছন্দ করেন।

এই লোকগুলির কোনওটিই ভুল নয়।

আপনার যদি প্রয়োজন হয় এটি ওভাররিডযোগ্য হ'ল কেবল স্থির হিসাবে এটি লেবেলিং বন্ধ করুন। নথিংস বিরতিতে চলেছে কারণ আপনার চারপাশে স্টেটলেস অবজেক্ট রয়েছে।


ভাষা যদি স্ট্রাক্টকে সমর্থন করে তবে একটি ইউনিট টাইপ শূন্য আকারের স্ট্রাক্ট হতে পারে, যা লজিকাল এন্ট্রি পদ্ধতিতে পাস করা হয়। এই অবজেক্টটি তৈরি করা একটি বাস্তবায়ন বিশদ। এবং যদি আমরা বাস্তবের বিবরণটিকে প্রকৃত সত্য হিসাবে কথা বলা শুরু করি, তবে আমি মনে করি যে আপনাকে বাস্তব-বিশ্ব বাস্তবায়নের ক্ষেত্রে শূন্য-আকারের টাইপটি আসলে তাত্ক্ষণিকভাবে চালিত করতে হবে না (কারণ লোড করার জন্য কোনও নির্দেশের প্রয়োজন নেই) এটি বা এটি সঞ্চয়)।
থিওডোরোস চ্যাটজিগিয়ানানাকিস

এবং যদি আপনি আরও "পর্দার আড়ালে" কথা বলছেন (যেমন এক্সিকিউটেবল স্তরে), তবে পরিবেশের যুক্তিগুলি ভাষার একটি ধরণ হিসাবে সংজ্ঞায়িত করা যেতে পারে এবং প্রোগ্রামটির "আসল" প্রবেশের স্থানটি উদাহরণের পদ্ধতি হতে পারে could এই ধরণের, ওএস লোডার দ্বারা প্রোগ্রামটিতে যা যা ঘটেছে তার উপর অভিনয় করে।
থিওডোরোস চ্যাটজিগিয়ানানাকিস

আমি মনে করি এটি আপনি কীভাবে দেখেন তার উপর নির্ভর করে। উদাহরণস্বরূপ, যখন কোনও প্রোগ্রাম শুরু হয়, ওএস এটিকে মেমরিতে লোড করে এবং তারপরে সেই ঠিকানায় যায় যেখানে প্রোগ্রামটির পৃথক প্রয়োগ বাইনারি এন্ট্রি পয়েন্ট থাকে (যেমন _start()লিনাক্সের প্রতীক)। উদাহরণস্বরূপ, এক্সিকিউটেবল হ'ল অবজেক্ট (এটির নিজস্ব "প্রেরণ টেবিল" এবং সমস্ত কিছু রয়েছে) এবং এন্ট্রি পয়েন্ট হ'ল ডায়নামিকভাবে প্রেরণ করা অপারেশন। সুতরাং, কোনও প্রোগ্রামের এন্ট্রি পয়েন্টটি বাহ্যিকভাবে ভার্চুয়াল হয় যখন বাইরে থেকে দেখা হয় এবং সহজেই অভ্যন্তরীণ থেকেও ভার্চুয়াল দেখা যায়।
থিওডোরোস চ্যাটজিগিয়ানানাকিস

1
"নথিংস ভেঙে যাচ্ছে কারণ আপনার চারপাশে একটি স্টেটলেস অবজেক্ট রয়েছে।" ++++++
RubberDuck

@ থিডোরোস চ্যাটজিগিয়ানানাকিস আপনি দৃ you় যুক্তি দিচ্ছেন। আর কিছু না হলে আপনি আমাকে বোঝাতে পেরেছেন যে লাইনটি আমার উদ্দেশ্য নিয়ে ভাবা হয়নি। আমি সত্যই লোকদের স্থির পদ্ধতির সাথে অন্ধভাবে সংযুক্ত করে কিছু কিছু অভ্যাসগত অভ্যাস থেকে বিরত থাকার অনুমতি দেওয়ার চেষ্টা করছিলাম। তাই আমি আপডেট করেছি। থটস?
candied_orange

2

স্থির পদ্ধতিগুলি কেন ওভাররাইডযোগ্য হতে সক্ষম হবে না?

এটি "উচিত" এর প্রশ্ন নয়।

"ওভাররাইডিং" এর অর্থ " গতিশীল প্রেরণ "। "স্ট্যাটিক পদ্ধতি" এর অর্থ "স্ট্যাটিকালি প্রেরণ"। যদি কিছু স্থির থাকে তবে এটিকে ওভাররাইড করা যাবে না। যদি কোনও কিছু ওভাররাইড করা যায় তবে এটি অচল নয়।

আপনার প্রশ্নটি বরং এটি জিজ্ঞাসার অনুরূপ: "ট্রাইসাইকেলগুলি চার চাকা রাখতে সক্ষম হবে না কেন?" "ট্রাইসাইকেল" এর সংজ্ঞাটি হ'ল তিন চাকা। যদি এটি ট্রাইসাইকেল হয় তবে এর চার চাকা থাকতে পারে না, যদি এটির চার চাকা থাকে তবে এটি ট্রাইসাইকেল হতে পারে না। তেমনি, "স্ট্যাটিক পদ্ধতি" এর সংজ্ঞাটি এটি স্থিতিশীলভাবে প্রেরণ করা হয়। যদি এটি একটি স্থিতিশীল পদ্ধতি হয় তবে এটি গতিশীলভাবে প্রেরণ করা যায় না, যদি এটি গতিশীলভাবে প্রেরণ করা যায় তবে এটি স্ট্যাটিক পদ্ধতি হতে পারে না।

অবশ্যই, ক্লাস পদ্ধতিগুলি ওভাররাইড করা যেতে পারে তা পুরোপুরি সম্ভব । অথবা, আপনার কাছে রুবির মতো ভাষা থাকতে পারে, যেখানে ক্লাসগুলি হ'ল অন্য বস্তুর মতো বস্তু এবং সুতরাং উদাহরণ পদ্ধতি থাকতে পারে, যা সম্পূর্ণরূপে শ্রেণিবদ্ধের প্রয়োজনকে সরিয়ে দেয়। (রুবিতে কেবল এক ধরণের পদ্ধতি রয়েছে: উদাহরণ পদ্ধতিগুলি It এটির কোনও শ্রেণি পদ্ধতি, স্থির পদ্ধতি, নির্মাতা, কার্যাদি বা পদ্ধতি নেই))


1
"সংজ্ঞা অনুসারে" ভাল করা।
candied_orange

1

সুতরাং সি # তে স্থির ক্রিয়াগুলি ভার্চুয়াল বা বিমূর্ত হতে পারে না

C #, আপনি সবসময় বর্গ, যেমন ব্যবহার স্ট্যাটিক সদস্যদের কল BaseClass.StaticMethod(), না baseObject.StaticMethod()। সুতরাং অবশেষে, যদি আপনি ChildClassউত্তরাধিকার সূত্রে পেয়ে থাকেন BaseClassএবং childObjectউদাহরণস্বরূপ ChildClass, আপনি আপনার স্থিতিশীল পদ্ধতিটি কল করতে সক্ষম হবেন না childObject। আপনার সর্বদা স্পষ্টরূপে আসল শ্রেণিটি ব্যবহার করা দরকার, সুতরাং ন্যায়বিচারটি কোনও static virtualঅর্থ দেয় না।

আপনি যা করতে পারেন তা হ'ল staticআপনার শিশু শ্রেণিতে একই পদ্ধতিটির নতুন সংজ্ঞা দেওয়া এবং newকীওয়ার্ডটি ব্যবহার করা ।

class BaseClass {
    public static int StaticMethod() { return 1; }
}

class ChildClass {
    public static new int StaticMethod() { return BaseClass.StaticMethod() + 2; }
}

int result;    
var baseObj = new BaseClass();
var childObj = new ChildClass();

result = BaseClass.StaticMethod();
result = baseObj.StaticMethod(); // DOES NOT COMPILE

result = ChildClass.StaticMethod();
result = childObj.StaticMethod(); // DOES NOT COMPILE

যদি এটি কল করা সম্ভব হয় baseObject.StaticMethod(), তবে আপনার প্রশ্নটি বোধগম্য হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.