"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يتم دعم الأساليب الثابتة التجريدية في C#؟

لماذا لا يتم دعم الأساليب الثابتة التجريدية في C#؟

نشر في 2025-02-06
تصفح:847

Why are Abstract Static Methods Not Supported in C#?

أثناء العمل مع مقدمي الخدمات ، قد يواجه المرء سيناريو حيث يرغبون في إنشاء فئة مجردة ذات طريقة ثابتة مجردة. يوفر استكشاف الأسباب وراء عدم وجود هذه الميزة فهمًا أوضح.

طرق ثابتة: نظرة أعمق

كائن لاستخدامه في الوصول إليه. يتم استدعاءها من خلال اسم الفصل ، وليس من خلال مرجع كائن. تسمي رمز اللغة المتوسطة (IL) التي تم إنشاؤها للطريقة الثابتة ، اسم الفئة التي تحدد الطريقة مباشرة ، بغض النظر عن فئة الاتصال.

توضح هذا ، ضع في اعتبارك الكود التالي: الفئة العامة أ { اختبار الفراغ الثابت العام () { } } الطبقة العامة ب: أ { } برنامج الفصل { باطل ثابت رئيسي (سلسلة [] args) { B.Test () ؛ } }

على الرغم من استدعاء الطريقة من خلال فئة B ، فإن رمز IL الفعلي الذي تم إنشاؤه يشبه هذا:

. .Maxstack 8 L0000: NOP L0001: استدعاء void consomeapplication1.a :: test () L0006: NOP L0007: ret لاحظ أن المكالمة تتم إلى A.Test ، على الرغم من أن الكود المصدري المستخدم B.Test. يوضح هذا أنه يتم حل استدعاء الطريقة الثابتة في وقت الترجمة بناءً على الفئة التي تحدد الطريقة ، وليس فئة الاتصال. تتيح الطرق السلوك متعدد الأشكال من خلال السماح بتنفيذ مختلف لنفس الطريقة في الفئات المشتقة. ومع ذلك ، فإن المكالمات الثابتة غير قليلة في .NET ، لأنها تستهدف بشكل مباشر طريقة محددة بناءً على اسم الفصل. لذلك ، فإن الأساليب الثابتة الافتراضية أو المجردة لن تخدم غرضًا عمليًا في C#.

الاستنتاج
public class A
{
    public static void Test()
    {
    }
}

public class B : A
{
}

class Program
{
    static void Main(string[] args)
    {
        B.Test();
    }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3