আমি ক্লাস পদ্ধতি হিসাবে একই স্বাক্ষর সহ একটি এক্সটেনশন পদ্ধতিটি আহ্বানের একটি উপায় খুঁজে পেয়েছি, তবে এটি খুব মার্জিত বলে মনে হয় না। এক্সটেনশন পদ্ধতিগুলি নিয়ে ঘুরে দেখার সময় আমি কিছু অনিবন্ধিত আচরণ লক্ষ্য করেছি। কোডের উদাহরণ:
public static class TestableExtensions
{
public static string GetDesc(this ITestable ele)
{
return "Extension GetDesc";
}
public static void ValDesc(this ITestable ele, string choice)
{
if (choice == "ext def")
{
Console.WriteLine($"Base.Ext.Ext.GetDesc: {ele.GetDesc()}");
}
else if (choice == "ext base" && ele is BaseTest b)
{
Console.WriteLine($"Base.Ext.Base.GetDesc: {b.BaseFunc()}");
}
}
public static string ExtFunc(this ITestable ele)
{
return ele.GetDesc();
}
public static void ExtAction(this ITestable ele, string choice)
{
ele.ValDesc(choice);
}
}
public interface ITestable
{
}
public class BaseTest : ITestable
{
public string GetDesc()
{
return "Base GetDesc";
}
public void ValDesc(string choice)
{
if (choice == "")
{
Console.WriteLine($"Base.GetDesc: {GetDesc()}");
}
else if (choice == "ext")
{
Console.WriteLine($"Base.Ext.GetDesc: {this.ExtFunc()}");
}
else
{
this.ExtAction(choice);
}
}
public string BaseFunc()
{
return GetDesc();
}
}
আমি যেটা লক্ষ্য করেছিলাম তা হ'ল যদি আমি কোনও এক্সটেনশন পদ্ধতির অভ্যন্তর থেকে দ্বিতীয় পদ্ধতিটি কল করি তবে এটি এমন একটি বর্ধিতাংশ কল করবে যা স্বাক্ষরের সাথে মেলে এমনকি এমন একটি শ্রেণি পদ্ধতিও ছিল যা স্বাক্ষরের সাথে মিলে। উদাহরণস্বরূপ, উপরের কোডটিতে, যখন আমি এক্সটফঙ্ক () বলি, যা ঘুরে ফিরে এলি বলে G গেটডেস্ক (), আমি প্রত্যাশা করতাম স্ট্রিং "বেস গেটডেস্ক" এর পরিবর্তে ফিরতি স্ট্রিং "এক্সটেনশন গেটডেস্ক" পাই।
কোডটি পরীক্ষা করা হচ্ছে:
var bt = new BaseTest();
bt.ValDesc("");
bt.ValDesc("ext");
bt.ValDesc("ext def");
bt.ValDesc("ext base");
এটি আপনাকে শ্রেণীবদ্ধের পদ্ধতি এবং প্রসারিত পদ্ধতির মধ্যে ইচ্ছামত পিছনে পিছনে ছুঁড়ে ফেলার অনুমতি দেয়, তবে আপনার পছন্দসই "সুযোগ" এ যাওয়ার জন্য নকল "পাস-থ্রু" পদ্ধতির সংযোজন প্রয়োজন। আমি এখানে আরও ভাল শব্দের অভাবের জন্য এটিকে সুযোগ বলছি। আশা করি কেউ এটিকে আসলে কী বলা হচ্ছে তা আমাকে জানাতে পারেন।
আপনি হয়ত আমার "পাস-থ্রু" পদ্ধতির নামগুলি দ্বারা অনুমান করতে পেরেছিলেন যে আমি তাদের কাছে প্রতিনিধিদের পাস করার ধারণাটিও দিয়েছিলাম যে এই আশায় যে কোনও একা দুটি পদ্ধতি একই স্বাক্ষরের সাথে একাধিক পদ্ধতির পাস-মাধ্যমে কাজ করতে পারে। দুর্ভাগ্যক্রমে এটি একবার যেমন প্রতিনিধি আনপ্যাক করা হয়নি এমনটি ছিল না এটি সর্বদা এক্সটেনশন পদ্ধতির চেয়ে এমনকি অন্য এক্সটেনশন পদ্ধতির অভ্যন্তর থেকে শ্রেণি পদ্ধতিটি বেছে নিয়েছিল। "ব্যাপ্তি" আর গুরুত্বপূর্ণ নয়। আমি অ্যাকশন এবং ফানক প্রতিনিধিদের খুব বেশি ব্যবহার করি নি যদিও সম্ভবত আরও অভিজ্ঞ কেউ এই অংশটি বের করতে পারে।