الأخوة أعضاء المنتدى :
أتمنى ممن له خبرة في موضوع Operators overloading أن يساعدني, فأنا أعمل على مشروع برنامج تتطلب مني إنشاء فئة (class) خاصة لها عدة خواص منها أنني أود تخصيص كل من المعاملات (== , =, !=).
ولكم جزيل الشكر.
أخوكم محمد سليم الزيات
الأخوة أعضاء المنتدى :
أتمنى ممن له خبرة في موضوع Operators overloading أن يساعدني, فأنا أعمل على مشروع برنامج تتطلب مني إنشاء فئة (class) خاصة لها عدة خواص منها أنني أود تخصيص كل من المعاملات (== , =, !=).
ولكم جزيل الشكر.
أخوكم محمد سليم الزيات
لا إله إلا الله محمد رسول الله
アッラー以外に神はなし。ムハンマドはアッラーの使徒である
لاحظ ان عامل التعيين "=" لا يقبل اعادة التعريف.
وإضافة إلى مثال الأخ نور
هذا المثال من الـ MSDN يشرح عمليات اعادة التعريف بالكامل
[color= #666666; font-style: italic;]//Copyright © Microsoft Corporation. All rights reserved.
[color= #666666; font-style: italic;]// dbbool.cs
using System;
public [color= #993333;]struct DBBool
[color= #009900;]{
[color= #666666; font-style: italic;]// The three possible DBBool values:
public [color= #993333;]static readonly DBBool dbNull [color= #339933;]= new DBBool[color= #009900;]([color= #cc66cc;]0[color= #009900;]);
public [color= #993333;]static readonly DBBool dbFalse [color= #339933;]= new DBBool[color= #009900;]([color= #cc66cc;]-1[color= #009900;]);
public [color= #993333;]static readonly DBBool dbTrue [color= #339933;]= new DBBool[color= #009900;]([color= #cc66cc;]1[color= #009900;]);
[color= #666666; font-style: italic;]// Private field that stores -1, 0, 1 for dbFalse, dbNull, dbTrue:
[color= #993333;]int value;
[color= #666666; font-style: italic;]// Private constructor. The value parameter must be -1, 0, or 1:
DBBool[color= #009900;]([color= #993333;]int value[color= #009900;])
[color= #009900;]{
this.[color= #202020;]value [color= #339933;]= value;
[color= #009900;]}
[color= #666666; font-style: italic;]// Implicit conversion from bool to DBBool. Maps true to
[color= #666666; font-style: italic;]// DBBool.dbTrue and false to DBBool.dbFalse:
public [color= #993333;]static implicit operator DBBool[color= #009900;](bool x[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return x? dbTrue[color= #339933;]: dbFalse;
[color= #009900;]}
[color= #666666; font-style: italic;]// Explicit conversion from DBBool to bool. Throws an
[color= #666666; font-style: italic;]// exception if the given DBBool is dbNull, otherwise returns
[color= #666666; font-style: italic;]// true or false:
public [color= #993333;]static explicit operator bool[color= #009900;](DBBool x[color= #009900;])
[color= #009900;]{
[color= #b1b100;]if [color= #009900;](x.[color= #202020;]value [color= #339933;]== [color= #cc66cc;]0[color= #009900;]) throw new InvalidOperationException[color= #009900;]([color= #009900;]);
[color= #b1b100;]return x.[color= #202020;]value > [color= #cc66cc;]0;
[color= #009900;]}
[color= #666666; font-style: italic;]// Equality operator. Returns dbNull if either operand is dbNull,
[color= #666666; font-style: italic;]// otherwise returns dbTrue or dbFalse:
public [color= #993333;]static DBBool operator [color= #339933;]==[color= #009900;](DBBool x, DBBool y[color= #009900;])
[color= #009900;]{
[color= #b1b100;]if [color= #009900;](x.[color= #202020;]value [color= #339933;]== [color= #cc66cc;]0 || y.[color= #202020;]value [color= #339933;]== [color= #cc66cc;]0[color= #009900;]) [color= #b1b100;]return dbNull;
[color= #b1b100;]return x.[color= #202020;]value [color= #339933;]== y.[color= #202020;]value? dbTrue[color= #339933;]: dbFalse;
[color= #009900;]}
[color= #666666; font-style: italic;]// Inequality operator. Returns dbNull if either operand is
[color= #666666; font-style: italic;]// dbNull, otherwise returns dbTrue or dbFalse:
public [color= #993333;]static DBBool operator [color= #339933;]!=[color= #009900;](DBBool x, DBBool y[color= #009900;])
[color= #009900;]{
[color= #b1b100;]if [color= #009900;](x.[color= #202020;]value [color= #339933;]== [color= #cc66cc;]0 || y.[color= #202020;]value [color= #339933;]== [color= #cc66cc;]0[color= #009900;]) [color= #b1b100;]return dbNull;
[color= #b1b100;]return x.[color= #202020;]value [color= #339933;]!= y.[color= #202020;]value? dbTrue[color= #339933;]: dbFalse;
[color= #009900;]}
[color= #666666; font-style: italic;]// Logical negation operator. Returns dbTrue if the operand is
[color= #666666; font-style: italic;]// dbFalse, dbNull if the operand is dbNull, or dbFalse if the
[color= #666666; font-style: italic;]// operand is dbTrue:
public [color= #993333;]static DBBool operator [color= #339933;]
[color= #009900;]{
[color= #b1b100;]return new DBBool[color= #009900;]([color= #339933;]-x.[color= #202020;]value[color= #009900;]);
[color= #009900;]}
[color= #666666; font-style: italic;]// Logical AND operator. Returns dbFalse if either operand is
[color= #666666; font-style: italic;]// dbFalse, dbNull if either operand is dbNull, otherwise dbTrue:
public [color= #993333;]static DBBool operator [color= #339933;]&[color= #009900;](DBBool x, DBBool y[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return new DBBool[color= #009900;](x.[color= #202020;]value < y.[color= #202020;]value? x.[color= #202020;]value[color= #339933;]: y.[color= #202020;]value[color= #009900;]);
[color= #009900;]}
[color= #666666; font-style: italic;]// Logical OR operator. Returns dbTrue if either operand is
[color= #666666; font-style: italic;]// dbTrue, dbNull if either operand is dbNull, otherwise dbFalse:
public [color= #993333;]static DBBool operator |[color= #009900;](DBBool x, DBBool y[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return new DBBool[color= #009900;](x.[color= #202020;]value > y.[color= #202020;]value? x.[color= #202020;]value[color= #339933;]: y.[color= #202020;]value[color= #009900;]);
[color= #009900;]}
[color= #666666; font-style: italic;]// Definitely true operator. Returns true if the operand is
[color= #666666; font-style: italic;]// dbTrue, false otherwise:
public [color= #993333;]static bool operator [color= #000000; font-weight: bold;]true[color= #009900;](DBBool x[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return x.[color= #202020;]value > [color= #cc66cc;]0;
[color= #009900;]}
[color= #666666; font-style: italic;]// Definitely false operator. Returns true if the operand is
[color= #666666; font-style: italic;]// dbFalse, false otherwise:
public [color= #993333;]static bool operator [color= #000000; font-weight: bold;]false[color= #009900;](DBBool x[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return x.[color= #202020;]value < [color= #cc66cc;]0;
[color= #009900;]}
[color= #666666; font-style: italic;]// Overload the conversion from DBBool to string:
public [color= #993333;]static implicit operator [color= #993333;]string[color= #009900;](DBBool x[color= #009900;])
[color= #009900;]{
[color= #b1b100;]return x.[color= #202020;]value > [color= #cc66cc;]0 ? [color= #ff0000;]"dbTrue"
[color= #339933;]: x.[color= #202020;]value < [color= #cc66cc;]0 ? [color= #ff0000;]"dbFalse"
[color= #339933;]: [color= #ff0000;]"dbNull";
[color= #009900;]}
[color= #666666; font-style: italic;]// Override the Object.Equals(object o) method:
public override bool Equals[color= #009900;](object o[color= #009900;])
[color= #009900;]{
try
[color= #009900;]{
[color= #b1b100;]return [color= #009900;](bool[color= #009900;]) [color= #009900;](this [color= #339933;]== [color= #009900;](DBBool[color= #009900;]) o[color= #009900;]);
[color= #009900;]}
catch
[color= #009900;]{
[color= #b1b100;]return [color= #000000; font-weight: bold;]false;
[color= #009900;]}
[color= #009900;]}
[color= #666666; font-style: italic;]// Override the Object.GetHashCode() method:
public override [color= #993333;]int GetHashCode[color= #009900;]([color= #009900;])
[color= #009900;]{
[color= #b1b100;]return value;
[color= #009900;]}
[color= #666666; font-style: italic;]// Override the ToString method to convert DBBool to a string:
public override [color= #993333;]string ToString[color= #009900;]([color= #009900;])
[color= #009900;]{
[color= #b1b100;]switch [color= #009900;](value[color= #009900;])
[color= #009900;]{
[color= #b1b100;]case [color= #cc66cc;]-1[color= #339933;]:
[color= #b1b100;]return [color= #ff0000;]"DBBool.False";
[color= #b1b100;]case [color= #cc66cc;]0[color= #339933;]:
[color= #b1b100;]return [color= #ff0000;]"DBBool.Null";
[color= #b1b100;]case [color= #cc66cc;]1[color= #339933;]:
[color= #b1b100;]return [color= #ff0000;]"DBBool.True";
[color= #b1b100;]default[color= #339933;]:
throw new InvalidOperationException[color= #009900;]([color= #009900;]);
[color= #009900;]}
[color= #009900;]}
[color= #009900;]}
class Test
[color= #009900;]{
[color= #993333;]static [color= #993333;]void Main[color= #009900;]([color= #009900;])
[color= #009900;]{
DBBool a, b;
a [color= #339933;]= DBBool.[color= #202020;]dbTrue;
b [color= #339933;]= DBBool.[color= #202020;]dbNull;
Console.[color= #202020;]WriteLine[color= #009900;]( [color= #ff0000;]"!{0} = {1}", a, [color= #339933;]!a[color= #009900;]);
Console.[color= #202020;]WriteLine[color= #009900;]( [color= #ff0000;]"!{0} = {1}", b, [color= #339933;]!b[color= #009900;]);
Console.[color= #202020;]WriteLine[color= #009900;]( [color= #ff0000;]"{0} & {1} = {2}", a, b, a [color= #339933;]& b[color= #009900;]);
Console.[color= #202020;]WriteLine[color= #009900;]( [color= #ff0000;]"{0} | {1} = {2}", a, b, a | b[color= #009900;]);
[color= #666666; font-style: italic;]// Invoke the true operator to determine the Boolean
[color= #666666; font-style: italic;]// value of the DBBool variable:
[color= #b1b100;]if [color= #009900;](b[color= #009900;])
Console.[color= #202020;]WriteLine[color= #009900;]([color= #ff0000;]"b is definitely true"[color= #009900;]);
[color= #b1b100;]else
Console.[color= #202020;]WriteLine[color= #009900;]([color= #ff0000;]"b is not definitely true"[color= #009900;]);
[color= #009900;]}
[color= #009900;]}تم تعديل هذه المشاركة بواسطة ddata11 في 24 نوفمبر 2008 في 15:26
[وسط]لا اله الا انت سبحانك انى كنت من الظالمين
[/وسط]