স্থির পদ্ধতিগুলি যেমন ইনস্ট্যান্ট হয় না , সেগুলি কেবল কোনও অবজেক্টের রেফারেন্স ছাড়াই উপলব্ধ।
স্ট্যাটিক পদ্ধতিতে একটি কল শ্রেণীর নামের মাধ্যমে করা হয়, কোনও অবজেক্ট রেফারেন্সের মাধ্যমে নয়, এবং ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (আইএল) কোডটি কল করার জন্য এটি বিমূর্ত পদ্ধতিটি শ্রেণীর নামের মাধ্যমে কল করবে যা এটি সংজ্ঞায়িত করেছে, অগত্যা এর নাম নয় আপনি ব্যবহৃত ক্লাস।
একটি উদাহরণ দেখা যাক।
নিম্নলিখিত কোড সহ:
public class A
{
public static void Test()
{
}
}
public class B : A
{
}
আপনি যদি B.Test কল করেন তবে এটি পছন্দ করুন:
class Program
{
static void Main(string[] args)
{
B.Test();
}
}
তারপরে মূল পদ্ধতির অভ্যন্তরীণ কোডটি নিম্নরূপ:
.entrypoint
.maxstack 8
L0000: nop
L0001: call void ConsoleApplication1.A::Test()
L0006: nop
L0007: ret
আপনি দেখতে পাচ্ছেন, কলটি এ.টেস্টে করা হয়েছিল, কারণ এটি এমন একটি শ্রেণি যা এটি সংজ্ঞায়িত করেছিল, এবং বি.স্টেস্টের কাছে নয়, যদিও আপনি কোডটি সেভাবেই লিখতে পারেন।
আপনার যদি ক্লাসের ধরণ থাকে যেমন ডেলফির মতো, যেখানে আপনি কোনও প্রকারকে উল্লেখ করতে পারেন এবং কোনও অবজেক্টকে নয় তবে আপনার ভার্চুয়াল এবং আরও বিমূর্ত স্ট্যাটিক পদ্ধতি (এবং নির্মাণকারী) এর জন্য আরও ব্যবহার করতে পারেন তবে সেগুলি উপলভ্য নয় এবং এইভাবে স্থির কলগুলি NET- এ অ-ভার্চুয়াল।
আমি বুঝতে পেরেছি যে আইএল ডিজাইনারগণ কোডটি বি.স্টেস্ট কল করতে, এবং রানটাইমের সময় কলটি সমাধান করার অনুমতি দিতে পারে, তবে এটি এখনও ভার্চুয়াল হবে না, কারণ আপনাকে এখনও সেখানে কিছু ধরণের শ্রেণীর নাম লিখতে হবে।
ভার্চুয়াল পদ্ধতিগুলি এবং সুতরাং বিমূর্ত পদ্ধতিগুলি কেবল তখনই কার্যকর যখন আপনি কোনও চলক ব্যবহার করেন যা রানটাইমের সময় বিভিন্ন ধরণের অবজেক্ট ধারণ করতে পারে এবং আপনি বর্তমান ভেরিয়েবলের জন্য সঠিক পদ্ধতিটি কল করতে চান। স্থির পদ্ধতিগুলির সাথে আপনাকে যেভাবেই কোনও শ্রেণীর নাম দিয়ে যেতে হবে, সুতরাং কল করার সঠিক পদ্ধতিটি সংকলন সময়ে জানা যায় কারণ এটি পরিবর্তন করতে পারে না এবং পরিবর্তনও করতে পারে না।
সুতরাং, ভার্চুয়াল / বিমূর্ত স্ট্যাটিক পদ্ধতি .NET তে উপলব্ধ নেই।