DCSIMG
Operator Overload - Part 1 - שלמה גולדברג (הרב דוטנט)
Sign in | Join | Help

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Operator Overload - Part 1

פורסם בתאריך Mar 15 2010, 10:04 PM על ידי Shlomo | ישנם 3 תגובות

 

נניח שיש לכם את המחלקה הבאה:
 

class Dolar

{

    public double Value { get; set; }

 

    public Dolar(double value)

    {

        Value = value;

    }

}

 
וב - main
 
 

Dolar d1 = new Dolar(10);

Dolar d2 = new Dolar(20);

 

if (d1.Value > d2.Value)

{

}

 
לכאורה הקוד היה יותר קריא לו יכולנו לכתוב כך
 

if (d1 > d2)

{

}

 
כדי לעשות את זה צריך להוסיף למחלקה את הקוד הבא
 
 

public static bool operator >(Dolar d1, Dolar d2)

{

    return d1.Value > d2.Value;

}

 

public static bool operator <(Dolar d1, Dolar d2)

{

    return d1.Value < d2.Value;

}

 
 
למעשה נוכל לדרוס כמעט את כל האופרטרים שקיימים, אבל צריך לעשות את זה בזהירות כי אם נחליט שאנחנו מממשים את האופרטור < על PersonManager אף אחד לא יבין את הקוד שלנו, מה שצריך לזכור שהמטרה של OperatorOverload זה להקל על הקריאות של הקוד ולא להקשות עליו.
 
נקודה נוספת, שתמיד צריך לעשות את זה בצמדים כלומר אם אתם מממשים את האופרטור < אתם חייבים לממש את האופרטור > ואם תממשו את האופרטור == אתם חייבים לממש גם את != וכו'
 
 
כמובן שאפשר גם לכתוב כך
 

public static bool operator >(Dolar d1, double d2)

{

    return d1.Value > d2;

}

 

public static bool operator <(Dolar d1, double d2)

{

    return d1.Value < d2;

}

 

public static bool operator >(double d1, Dolar d2)

{

    return d1 > d2.Value;

}

 

public static bool operator <(double d1, Dolar d2)

{

    return d1 < d2.Value ;

}

 
 
ואז ב - main
 
 

if (d1 > 50)

{

}

 

if (50 > d1)

{

}

רשימת תגובות

# re: Operator Overload - Part 1

פורסם בתאריך Saturday, April 03, 2010 1:37 AM על ידי עדי  

נהוג לממש אופרטור אחד - ואת הנגדי לו לממש ע"י שלילת הראשון. כך אתה מבטיח את הנכונות הלוגית של האופרטור (לא יתכן שגם "גדול מ" וגם "קטן מ" יחזירו את אותה תשובה)

# Operator Overload - Part 2 (explicit, implicit)

פורסם בתאריך Tuesday, April 06, 2010 5:22 PM על ידי שלמה גולדברג  

בהמשך להסבר איך דורסים את האופרטורים הרגילים, נראה כאן איך אפשר לממס אופרטרים של casting - למה הכוונה

# re: Operator Overload - Part 1

פורסם בתאריך Saturday, July 31, 2010 5:13 PM על ידי לעדי  

זה נכון, אבל הדוגמה שנתת אינה טובה כיוון שההיפך מ"קטן מ" זה "גדול או שווה ל" .

שלח תגובה

(שדה חובה) 
(שדה חובה) 
(אופציונלי)
(שדה חובה) 

Enter the numbers above: