مشاريع كيف يمكنني إنشاء أساليب النموذج الأولي(مثل جافا سكريبت) في C#.Net؟




مشاريع جافا سكريبت (4)

كيف يمكن جعل أساليب النموذج الأولي في C # .Net؟

في جافاسكريبت، يمكنني القيام بما يلي لإنشاء طريقة تقليم للكائن سلسلة:

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

كيف يمكنني القيام بذلك في C # .Net؟


تحتاج إلى إنشاء أسلوب ملحق يتطلب نيت 3.5. يجب أن تكون الطريقة ثابتة، في فئة ثابتة. يجب أن تكون المعلمة الأولى من الأسلوب مسبوقة مع "هذا" في التوقيع.

public static string MyMethod(this string input)
{
    // do things
}

يمكنك ثم نسميها مثل

"asdfas".MyMethod();

يبدو أنك تتحدث عن طرق الإرشاد في C #. يمكنك إضافة وظائف إلى الفئات الموجودة عن طريق إدراج الكلمة الرئيسية "هذه" قبل المعلمة الأولى. يجب أن تكون الطريقة طريقة ثابتة في فئة ثابتة. سلاسل في. نيت لديها بالفعل طريقة "تقليم"، لذلك سأستخدم مثال آخر.

public static class MyStringEtensions
{
    public static bool ContainsMabster(this string s)
    {
        return s.Contains("Mabster");
    }
}

حتى الآن كل سلسلة لديه طريقة كونتسمابستر مفيدة للغاية، والتي يمكنني استخدامها مثل هذا:

if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }

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

يتم التعامل مع أي معلمات إضافية تعلنها في طريقة التمديد (بعد المعلمة "ذيس" الأولى) كمعلمات عادية.


لا يمكنك إضافة أساليب إلى الكائنات الموجودة أو الفئات الموجودة في .NET إلا بشكل حيوي، إلا بتغيير مصدر تلك الفئة.

ومع ذلك، يمكنك استخدام C # 3.0 في طرق الإرشاد، التي تبدو وكأنها أساليب جديدة، ولكن هي السحر وقت التجميع.

لإجراء ذلك من أجل شفرتك:

public static class StringExtensions
{
    public static String trim(this String s)
    {
        return s.Trim();
    }
}

لتستخدمها:

String s = "  Test  ";
s = s.trim();

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

String s = "  Test  ";
s = StringExtensions.trim(s);

ما الذي تحاول تنفيذه تحديدا؟ ربما هناك طرق أفضل للقيام بما تريد؟


باستخدام برنامج التحويل البرمجي 3.5 يمكنك استخدام أسلوب التمديد:

public static void Trim(this string s)
{
  // implementation
}

يمكنك استخدام هذا على كلر 2.0 المستهدفة المشروع (3.5 مترجم) من خلال تضمين هذا الاختراق:

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
  public sealed class ExtensionAttribute : Attribute
  {
  }
}






.net