למד כיצד להשתמש בממשקים המוגדרים על-ידי המערכת

הושלם

שילוב של ממשקים המוגדרים על-ידי המערכת ביישומי C# שימושי בתרחישי קידוד מעשיים רבים. ממשקים המוגדרים על-ידי המערכת ב- C#, מאפשרים לך להחיל פונקציונליות מוגדרת מראש, מה שהופך את היישומים שלך לעקביים ויציבים.

ממשקים נפוצים המשמשים בשיטות

כמה ממשקים נפוצים משמשים לעתים קרובות בשיטות C# בתוך .NET framework. ממשקים אלה מספקים פונקציונליות סטנדרטית המיושמת על-ידי כיתות שונות.

  • IComparable: משמש להשוואה בין אובייקטים.
  • IEnumerable: משמש להפעלה מחדש על-פני אוספים.
  • IDisposable: משמש להפצה של משאבים לא מנוהלים.
  • IEquatable: משמש להגדרת השוואות שוויון.

יישום ממשקים המוגדרים על-ידי המערכת

כדי ליישם חבר בממשק המוגדר על-ידי המערכת, החבר המתאים של המחלקה המיישמת חייב להיות ציבורי, staticלא , ולכלול שם וחתימה זהים לאותם שם וחתימה של חבר הממשק. מחלקה או תשתית המיישמת ממשק חייבים לספק יישום עבור כל החברים המוצהרת ללא יישום ברירת מחדל שסופק על-ידי הממשק.

ממשקים המוגדרים על-ידי המערכת ב- .NET משתמשים לעתים קרובות במציין מיקום T כדי לייצג כל סוג. לדוגמה, הממשק IEquatable מוגדר במסגרת .NET באופן הבא:

public interface IEquatable
{
    bool Equals(T other);
}

בעת יישום ממשק זה בכיתה, אתה מחליף T בסוג הכיתה.

לדוגמה, המחלקה הבאה Car מיישמת את הממשק IEquatable :

public class Car : IEquatable
{
    public string Make { get; set; }
    public string Model { get; set; }

    public bool Equals(Car other)
    {
        if (other == null) return false;
        return this.Make == other.Make && this.Model == other.Model;
    }
}

בדוגמה זו, Car מחליף את ב T - IEquatable, שהופך אותו ל IEquatable- . המחלקה Car מספקת יישום Equals משלה של פעולת השירות, MakeModelCar אשר בודקת אם המאפיינים והמאפיינים של האובייקט הנוכחי שווים למאפיינים של otherCar האובייקט.

מאפיינים ואינדקסים של מחלקה יכולים להגדיר אביזרים נוספים עבור מאפיין או בונה אינדקסים המוגדרים בממשק. לדוגמה, ממשק עשוי להצהיר על מאפיין בעל get אביזר. המחלקה המיישמת את הממשק יכולה להצהיר על אותו מאפיין עם אביזרget.set להלן דוגמה:

public interface IExampleInterface
{
    string Name { get; }
}

public class ExampleClass : IExampleInterface
{
    public string Name { get; set; }
}

בדוגמה זו, IExampleInterface מצהיר על Name מאפיין עם get אביזר. ExampleClass מיישמת את הממשק ומכריזה על אותו מאפיין עם אביזר getset .

שימוש בממשקים נפוצים המוגדרים על-ידי המערכת

ממשקים נפוצים המוגדרים על-ידי IEnumerableהמערכת, כגון , IDisposable, IComparable ומשמשים לעתים קרובות ביישומי .NET ממשקים אלה מספקים שיטות סטנדרטיות שניתן ליישם כדי להבטיח התנהגות עקבית בסוגים שונים.

IEnumerable

הממשק IEnumerable משמש להגדרת אוסף שניתן לספור. היא מכילה שיטה יחידה, GetEnumeratorהמחזירה מונה שעוברת דרך האוסף.

public class MyCollection : IEnumerable
{
    private int[] _items = { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < _items.Length; i++)
        {
            yield return _items[i];
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

IDisposable

הממשק IDisposable משמש להפצה של משאבים לא מנוהלים. משאבים לא מנוהלים הם משאבים שאינם מטופלים עם זמן הריצה של .NET, כגון נקודות אחיזה של קבצים, חיבורי רשת וכו'. חשוב לשחרר משאבים אלה לאחר שימוש כדי למנוע דליפות זיכרון ובעיות אחרות. היא מכילה שיטה אחת, Disposeהנקראת כדי לפנות משאבים.

public class ResourceHolder : IDisposable
{
    private bool _disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // Prevents the garbage collector from calling the finalizer if Dispose has already been called.
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // Free managed resources
            }
            // Free unmanaged resources
            _disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}

IComparable

הממשק IComparable משמש להגדרת פעולת שירות להשוואה בין מופעים של מחלקה. הוא מכיל פעולת שירות יחידה, CompareToאשר משווה את המופע הנוכחי לאובייקט אחר מאותו סוג.

public class Person : IComparable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        if (other == null) return 1; // If 'other' is null, this instance is considered greater
        return this.Age.CompareTo(other.Age); // Returns negative value if  precedes 'other', 0 if same position, or postive value if follows 'other'.
    }
}

בדוגמה זו, אם other הוא Null, אנו מחזירים 1, המציין שהמופע הנוכחי נחשב גדול מהפניה ל- Null.

ממשקים המוגדרים על-ידי המערכת ב- C# תפקיד מכריע ביצירת יישומים יעילים, יציבים ועקביים. הן מספקות שיטות סטנדרטיות שניתן ליישם בסוגים שונים, ומבטיחות אחידות וחזוי באופן הפעולה. על-ידי הבנה והטמעה יעילה של ממשקים אלה, באפשרותך להשתמש בפונקציונליות מוגדרת מראש ולהפחית את כמות הקוד החוזר על עצמו, דבר הניתן לתחזוקה וחזקה יותר של היישומים שלך.