مشاركة عبر


عضو التحميل الزائد

تتضمن توقيع عضو اسمه و معلمة القائمة. يجب أن يكون كل توقيع العضو فريداً نوع. الأعضاء يمكن أن يكون لديك نفس الاسم كما تختلف قوائم المعلمات الخاصة بها. عندما الأعضاء أو أكثر في نوع نفس نوع العضو (الأسلوب خاصية، المنشئ وهكذا) ولها نفس الاسم ومعلمات مختلفة lهوts، العضو هو يقال أن محملة فوق طاقتها. على سبيل المثال، Arrayفئة يحتوي على عمودين CopyToالأساليب. يأخذ الأسلوب أول لصفيف Int32القيمة، و ثانية يأخذ أسلوب الصفائف و Int64القيمة.

ملاحظةملاحظة

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

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

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

التحميل الزائد إرشادات

الإرشادات التالية ضمان أن أفراد overloaded مصممة بشكل جيد.

قم بمحاولة استخدام أسماء المعلمات وصفية للإشارة إلى الافتراضي الالقيمة المستخدمة بواسطة التحميلات الزائدة أبسط.

هذه الإرشادات العامة الأكثر مناسباً ل Booleanمعلمات. يجب أن تشير إلى اسم المعامل التحميل الزائد أكثر تعقيداً الافتراضي الالقيمة التي توفرها قبل التحميل الزائد أبسط وصف الحالة أو إجراء المقابل. For مثال, the String فئة provides the following التحميلات الزائدة:

Overloads Public Shared Function Compare( _
   ByVal strA As String, _
   ByVal strB As String _
) As Integer

Overloads Public Shared Function Compare( _
   ByVal strA As String, _
   ByVal strB As String, _
   ByVal ignoreCase As Boolean _
) As Integer
public static int Compare(
   string strA,
   string strB
);

public static int Compare(
   string strA,
   string strB,
   bool ignoreCase
);

The ثانية التحميل الزائد provides a Boolean معلمة named ignoreCase. This indicates that the simpler التحميل الزائد هو حالة-sensitive و you need إلى استخدم the المزيد complex التحميل الزائد فقط when you want إلى تجاهل casing. في عام, the القيمة افتراضية should usually be false.

Avoid arbitrarily varying معلمة أسماء في التحميلات الزائدة.If a معلمة في واحد التحميل الزائد represents the same إدخال كـ a معلمة في another التحميل الزائد, the معلمات should have the same اسم.

For مثال, do not do the following:

Public Sub Write(message as String, stream as FileStream)
End Sub
Public Sub Write(line as String, file as FileStream, closeStream as Boolean)
End Sub
public void Write(string message, FileStream stream){}
public void Write(string line, FileStream file, bool closeStream){}

The correct تعريف for these التحميلات الزائدة هو كـ follows:

Public Sub Write(message as String, stream as FileStream)
End Sub
Public Sub Write(message as String, stream as FileStream, _
    closeStream as Boolean)
End Sub
public void Write(string message, FileStream stream){}
public void Write(string message, FileStream stream, bool closeStream){}

Do be consistent في the ordering of معلمات في overloaded الأعضاء.معلمات مع the same اسم should appear في the same موضع في الجميع التحميلات الزائدة.

For مثال, do not do the following:

Public Sub Write( message as String, stream as FileStream)
End Sub
Public Sub Write(stream as FileStream, message as String, _
    closeStream as Boolean)
End Sub
public void Write(string message, FileStream stream){}
public void Write(FileStream stream,  string message, bool closeStream){}

The correct تعريف for these التحميلات الزائدة هو كـ follows:

Public Sub Write(message as String, stream as FileStream)
End Sub
Public Sub Write(message as String, stream as FileStream, _
    closeStream as Boolean)
End Sub
public void Write(string message, FileStream stream){}
public void Write(string message, FileStream stream, bool closeStream){}

This guideline has الثاني constraints:

  • If an التحميل الزائد takes a متغير وسيطة قائمة, the قائمة must be the أخير معلمة.

  • إذا كان التحميل الزائد يأخذ outالمعلمات، حسب اصطلاح يجب أن تظهر هذه كـ معلمات lكـt.

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

يلي تعليمات برمجية مثال يوضح هذا التدريب العملي.

Public Sub Write(message as String, stream as FileStream)
    Me.Write(message, stream, false)
End Sub

Public Overridable Sub Write( _
    message as String, stream as FileStream, closeStream as Boolean)
    ' Do work here.
End Sub
public void Write(string message, FileStream stream)
{
    this.Write(message, stream, false);
}
public virtual void Write(string message, FileStream stream, bool closeStream)
{
    // Do work here.
}

لا تقم باستخدام المرجع أو الخارج معدلات زيادة التحميل الأعضاء.

ل مثال، لا تقوم ما يلي.

Public Sub Write(message as String,  count as Integer)


...


Public Sub Write(message as String, ByRef count as Integer)
public void Write(string message, int count)


...


public void Write(string message, out int count)

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

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

على سبيل المثال، لا يجب أن يكون المطورين إلى البحث عن nullفي المثال التالي.

Public Sub CopyFile (source as FileInfo, _
    destination as DirectoryInfo, _
    newName as string)

    If newName Is Nothing
        InternalCopyFile(source, destination) 
    Else
        InternalCopyFile(source, destination, newName)
    End If
End Sub
public void CopyFile (FileInfo source, DirectoryInfo destination, string newName)
{
    if (newName == null)
    {
        InternalCopyFile(source, destination);
    }
    else
    {
        InternalCopyFile(source, destination, newName);
    }
}

هل استخدم عضو التحميل الزائد بدلاً من تعريف الأعضاء باستخدام الوسيطات الافتراضي.الافتراضي الوسيطات غير متوافق مع CLS ويتعذر استخدام من بعض اللغات.

يلي تعليمات برمجية يوضح المثال التصميم طريقة صحيحة.

Public Sub Rotate (data as Matrix, Optional degrees as Integer = 180)
' Do rotation here
End Sub

وهذا تعليمات برمجية يجب إعادة تصميم ك التحميلات الزائدة الثاني بالتحميل الزائد أسهل وتوفير القيمة افتراضية. يلي تعليمات برمجية يوضح المثال التصميم الصحيح.

Overloads Public Sub Rotate (data as Matrix)
    Rotate(data, 180)
End Sub

Overloads Public Sub Rotate (data as Matrix, degrees as Integer)
' Do rotation here
End Sub

أجزاء حقوق النشر 2005 Microsoft Office 2010 Suite Corporation. كافة الحقوق محفوظة.

أجزاء حقوق النشر شركة Addison-Wesley. كافة الحقوق محفوظة.

ل المزيد المعلومات تشغيل إرشادات التصميم، راجع "إطار عمل إرشادات التصميم: كتاب اصطلاحات، Idioms، و نقش لمكتبات.NET القابل لإعادة الاستخدام"ب Krzysztof Cwalina و رفيق Abrams، ينشره Addison-Wesley، 2005.

راجع أيضًا:

موارد أخرى

إرشادات تصميم عضو

تصميم إرشادات لتطوير مكتبات فئة