سؤال

سألت سؤال حول واجهات سابقا وحصلت على بعض الردود.أنا متحمس جدا للبدء في تطوير مرنة حقا رمز.

لدي الآن سؤال حول تجاوز أسلوب ظاهري.

أنا أعمل حاليا مع خادم المجتمع SDK.واحدة من الضوابط هو "العلامة" كسرة الخبز.لذلك سوف قائمة 'العلامات' على كائن ذات الصلة.

<CSBlog:TagBreadCrumb />

أنا باستخدام العلامات تسمح مسؤولي لاستهداف مناطق محددة للمحتوى تظهر في تخطيط غير أن تلك الكلمات ليست ذات الصلة إلى المستخدم النهائي.على سبيل المثال ، 'Home_Main' الوسم يستخدم هدف الفريق الرئيسي على الصفحة الرئيسية ولكن لا تريد المستخدم أن نرى ذلك.

منذ لدي SDK لـ خادم المجتمع ، وجدت التحكم الذي يجعل 'الوسم قائمة' و إجراء التعديلات على أن أفعل ما أريد - ولكن ما أفهمه هو أنه ليس من الجيد أن تعديل الأساسية لأسباب عديدة.

لذلك ما أود القيام به هو إنشاء بلدي التحكم الذي هو أساسا ما يقرب من 100 ٪ مطابقة قاعدة التحكم, ولكن تجاوز أسلوب واحد.

هنا هو الطريقة:

 public virtual string FormatTags(string[] tagList)

داخل هناك رمز على شكل علامات ، أود كتابة التعليمات البرمجية الخاصة بي وهو يفعل كل نفس الأشياء ، باستثناء الشيكات ملف التكوين من أجل 'العلامات' استبعاد.

حتى أفهمه هو أن بامكاني التحكم المستمدة من قاعدة التحكم و أستطيع أن أكتب بلدي FormatTags (طريقة) - هل هذا صحيح ؟

أنا فقط بحاجة إلى تغيير جانب واحد من ذلك ، ولكن هل هذا يعني أنني يجب أن نسخ رمز الأصلي لهذا الأسلوب من الفئة الأساسية و تغيير ما أنا بحاجة إلى هناك ؟ انها فقط لا يشعر الحق copyign رمز من بقعة واحدة ، ولكن لا أعرف طريقة أخرى لإطالة الطريقة دون تغيير التعليمات البرمجية في الفئة الأساسية.

شكرا على أي اقتراحات.

هل كانت مفيدة؟

المحلول

لا يزال بإمكانك تشغيل أسلوب المشتقة وتعمل على نتائجها:

public override string FormatTags(string[] tagList) {
    string result = base.FormatTags(tagList);
    // do something with result
    return result;
}

نصائح أخرى

في قضيتك (أين تريد قمع بعض العلامات من تتم طباعتها في فتات الخبز)، وكنت خارج الشريط كل علامات خاصة قبل استدعاء الأسلوب قاعدة.

وهكذا الشفرة سيبدو شيئا مثل:

public override string FormatTags(string[] tagList)
{
  // strip special tags
  string[] newTagList = stripTags(tagList);
  return base.FormatTags(newTagList);
}

وهذه الطريقة لا تحتاج لفهم كيفية تنسيقات الفئة الأساسية في سلسلة الانتاج.

إذا أردت بدلا من ذلك لتعديل شكل سلسلة الانتاج، وأنك لن تجعل أي مكالمات إلى طريقة قاعدة (منذ تلك الطريقة قد يتم تغيير انها التنسيق في الإصدارات المستقبلية، والتي لا تريد أن تتأثر ).

حتى أفهمه هو أن بامكاني التحكم المستمدة من قاعدة التحكم و أستطيع أن أكتب بلدي FormatTags (طريقة) - هل هذا صحيح ؟

هذا صحيح ؛ عند تجاوز توفر تطبيق الخاصة بك من قاعدة الطبقة طريقة.

في أفضل الأحوال ، أحد أمرين يحدث:

  • هناك طريقة سهلة لتحويل الناتج من قاعدة الطبقة طريقة إلى النتيجة المرجوة.

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

للأسف, لا يبدو أي من هذه هو الحال هنا, لذلك قد تضطر إلى كتابتها من الصفر.

<اقتباس فقرة>   

وهكذا ما أفهمه هو أن أخلق   إرادتي، المستمدة من قاعدة   السيطرة - وأستطيع أن أكتب بلدي   FormatTags طريقة (؟) - هل هذا صحيح

وصحيحة على الاطلاق.

إذا كنت تجد أنك تحتاج إلى نسخ الكثير من التعليمات البرمجية حولها، ويجب أن ننظر إلى إعادة هيكلة الطريقة الخاصة بك. ضع التعليمات البرمجية الذي يتم نسخها إلى طريقة أخرى أنك لن تجاوز، ومن ثم عند تجاوز FormatTags، تغيير ما تحتاج إلى ومجرد الوصول إلى هذا الرمز الذي كان قد نسخها بواسطة استدعاء الأسلوب الآخر.

ونلقي نظرة على . هذه تسمح لك لتوسيع قدرة فئة مختومة أنه لا يمكنك تعديل أو تمديد، من خلال تحديد وظيفة الخاص بك في فئة ثابتة الخاصة بك. وهنا مثال لقد كتبت للتو (قد تحتوي على أخطاء في بناء الجملة).

public static class MyExtensions
{
    public static string AppendCrazyText(this string s, string crazyText)
    {
        return s + crazyText;
    }
}

والآن، للوصول إلى هذا، يمكنني ببساطة الاتصال على:

string myString = "Hello world";
string myCrazyText = ", lets go crazy!";

string myResult = myString.AppendCrazyText(myCrazyText);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top