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

StackOverflow https://stackoverflow.com/questions/4610

  •  08-06-2019
  •  | 
  •  

سؤال

كيف من الممكن لجعل النموذج الطرق في C#.Net?

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

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

كيف يمكن أن تذهب عن القيام بذلك في C#.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);

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

نصائح أخرى

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

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

حتى الآن كل سلسلة لديه مفيدة جدا ContainsMabster الطريقة التي يمكنني استخدام مثل هذا:

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

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

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

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

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

ثم يمكنك استدعاء مثل

"asdfas".MyMethod();

باستخدام مترجم 3.5 يمكنك استخدام طريقة التمديد:

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

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

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
  public sealed class ExtensionAttribute : Attribute
  {
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top