الـ Operators في لغات البرمجة هي عبارة عن رموز بنستخدمها عشان نعمل عمليات على الـ Operands (المعاملات).
لو بصينا على معادلة بسيطة زي 2 + 3 = 5، هنا الأرقام 2 و3 هما الـ Operands، وعلامات + و \= هما الـ Operators. ببساطة، الـ Operators بتستخدم عشان نتعامل مع المتغيرات والقيم.
int x = 10, y = 20;
// Here, '+' is an operator manipulating variables x and y
int result1 = x + y;
// Here, '+' is an operator manipulating values 10 and 20
int result2 = 10 + 20; في المثال اللي فات،
xوyو10و20كلهم بنسميهمOperands. الـOperandممكن يكون متغير أو قيمة مباشرة.
Types of Operators
الـ Operators بتتقسم حسب نوع العملية اللي بتعملها، وكمان حسب عدد الـ Operands اللي بتحتاجها.
Categorization by Number of Operands
- الـ Unary Operator: بيحتاج
Operandواحد بس عشان يشتغل. - الـ Binary Operator: بيحتاج اتنين
Operandsعشان يشتغل. - الـ Ternary Operator: بيحتاج تلاتة
Operandsعشان يشتغل، وده بنسميه كمانConditional Operator.
Categorization by Function
graph TD A[Operators in C#] --> B[Arithmetic]; A --> C[Assignment]; A --> D[Relational / Comparison]; A --> E[Logical]; A --> F[Bitwise]; A --> G[Unary]; A --> H[Ternary];
Arithmetic Operators
الـ Arithmetic Operators بتُستخدم عشان نعمل العمليات الحسابية والرياضية زي الجمع والطرح والضرب وغيرهم.

Example
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
int Result;
int Num1 = 20, Num2 = 10;
// Addition Operation
Result = (Num1 + Num2);
Console.WriteLine($"Addition Operator: {Result}");
// Subtraction Operation
Result = (Num1 - Num2);
Console.WriteLine($"Subtraction Operator: {Result}");
// Multiplication Operation
Result = (Num1 * Num2);
Console.WriteLine($"Multiplication Operator: {Result}");
// Division Operation
Result = (Num1 / Num2);
Console.WriteLine($"Division Operator: {Result}");
// Modulo Operation
Result = (Num1 % Num2);
Console.WriteLine($"Modulo Operator: {Result}");
Console.ReadKey();
}
}
}Assignment Operators
الـ Assignment Operators بتُستخدم عشان نخصص قيمة لمتغير. الطرف الشمال من العملية لازم يكون متغير، والطرف اليمين ممكن يكون قيمة أو تعبير رياضي (expression) بيرجع قيمة.
مهم جدًا إن القيمة اللي في الطرف اليمين تكون من نفس نوع البيانات (Data Type) للمتغير اللي في الطرف الشمال، وإلا هيحصل compile-time error.

Example
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
// Initialize variable x
int x = 15;
x += 10; // same as x = x + 10
Console.WriteLine($"Add Assignment Operator: {x}");
x = 20;
x -= 5; // same as x = x - 5
Console.WriteLine($"Subtract Assignment Operator: {x}");
x = 15;
x *= 5; // same as x = x * 5
Console.WriteLine($"Multiply Assignment Operator: {x}");
x = 25;
x /= 5; // same as x = x / 5
Console.WriteLine($"Division Assignment Operator: {x}");
x = 25;
x %= 5; // same as x = x % 5
Console.WriteLine($"Modulo Assignment Operator: {x}");
Console.ReadKey();
}
}
}Relational (Comparison) Operators
الـ Relational Operators بنسميها كمان Comparison Operators. وظيفتها إنها تحدد العلاقة بين اتنين operands وبترجع نتيجة من نوع boolean (يعني true أو false).

Example
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
bool Result;
int Num1 = 5, Num2 = 10;
// Equal to Operator
Result = (Num1 == Num2);
Console.WriteLine($"Equal (==) to Operator: {Result}");
// Greater than Operator
Result = (Num1 > Num2);
Console.WriteLine($"Greater (>) than Operator: {Result}");
// Less than Operator
Result = (Num1 < Num2);
Console.WriteLine($"Less than (<) Operator: {Result}");
// Greater than or Equal to Operator
Result = (Num1 >= Num2);
Console.WriteLine($"Greater than or Equal to (>=) Operator: {Result}");
// Less than or Equal to Operator
Result = (Num1 <= Num2);
Console.WriteLine($"Lesser than or Equal to (<=) Operator: {Result}");
// Not Equal To Operator
Result = (Num1 != Num2);
Console.WriteLine($"Not Equal to (!=) Operator: {Result}");
Console.ReadKey();
}
}
}Logical Operators
الـ Logical Operators بتُستخدم بشكل أساسي في الشروط زي if وفي الحلقات التكرارية زي for و while عشان نقيم حالة معينة. الـ Operators دي بتتعامل مع تعبيرات boolean فقط.

Example
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
bool x = true, y = false, z;
// Logical AND operator
z = x && y;
Console.WriteLine("Logical AND Operator (&&) : " + z);
// Logical OR operator
z = x || y;
Console.WriteLine("Logical OR Operator (||) : " + z);
// Logical NOT operator
z = !x;
Console.WriteLine("Logical NOT Operator (!) : " + z);
Console.ReadKey();
}
}
}Bitwise Operators
الـ Bitwise Operators بتتعامل مع البيانات على مستوى الـ bit، وبتشتغل مع الأنواع الصحيحة (integer types) زي int, long, short, وغيرهم.
- الـ Bitwise AND
&: بيعمل عمليةANDعلى كلbitمقابل في الرقمين. النتيجة بتكون1فقط لو الـbitفي الرقمين كان1. - الـ Bitwise OR
|: بيعمل عمليةORعلى كلbit. النتيجة بتكون1لو أيbitمن الاتنين كان1. - الـ Bitwise XOR
^: بيعمل عمليةXOR. النتيجة بتكون1لو الـbitsالمقابلة مختلفة، و0لو متشابهة.
ملحوظة مهمة: لو استخدمنا الـ Bitwise Operators دي مع متغيرات من نوع bool، هتشتغل كأنها Logical Operators بالظبط.
Example (with Integers)
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
int a = 12, b = 25, Result; // 12 = 00001100, 25 = 00011001
// Bitwise AND: 00001000 -> 8
Result = a & b;
Console.WriteLine($"Bitwise AND: {Result}");
// Bitwise OR: 00011101 -> 29
Result = a | b;
Console.WriteLine($"Bitwise OR: {Result}");
// Bitwise XOR: 00010101 -> 21
Result = a ^ b;
Console.WriteLine($"Bitwise XOR: {Result}");
Console.ReadKey();
}
}
}Example (with Booleans)
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
bool a = true, b = false, Result;
// Behaves like Logical AND
Result = a & b;
Console.WriteLine($"Bitwise AND: {Result}");
// Behaves like Logical OR
Result = a | b;
Console.WriteLine($"Bitwise OR: {Result}");
// Behaves like Logical XOR
Result = a ^ b;
Console.WriteLine($"Bitwise XOR: {Result}");
Console.ReadKey();
}
}
}Unary Operators
الـ Unary Operators زي ما قلنا بتحتاج operand واحد بس. بتُستخدم عشان تزود قيمة أو تنقصها.
- Increment
++: بيزود القيمة بـ 1. - Decrement
--: بينقص القيمة بـ 1.

كل واحد فيهم ليه شكلين:
- الـ Prefix: العلامة بتيجي قبل المتغير (زي
++xو--x). هنا العملية (الزيادة أو النقصان) بتحصل الأول، بعدين بنستخدم قيمة المتغير الجديدة. - الـ Postfix: العلامة بتيجي بعد المتغير (زي
x++وx--). هنا بنستخدم قيمة المتغير القديمة الأول، بعدين العملية بتحصل.
How Unary Operators Work
عشان نفهم الـ Unary Operators بتشتغل إزاي جوه تعبير معقد، نمشي على 5 خطوات بسيطة:
- الـ Pre-increment/decrement: أي عملية
prefix(++xأو--x) في التعبير بتتنفذ الأول. - الـ Substitution: بنعوّض بالقيم الحالية للمتغيرات في التعبير.
- الـ Evaluation: بنحسب قيمة التعبير.
- الـ Assignment: بنخصص القيمة النهائية للمتغير اللي على الشمال.
- الـ Post-increment/decrement: أي عملية
postfix(x++أوx--) في التعبير بتتنفذ في الآخر خالص.
Complex Example
تعالوا نطبق الخطوات دي على مثال:
int x = 10, y = 20, z;
z = x++ * --y;
// What are the final values of x, y, and z?- الخطوة 1 (Prefix): عندنا
--y. قيمةyهتنقص 1 وتبقى19. - الخطوة 2 (Substitution): هنعوّض بالقيم. التعبير هيبقى
z = 10 * 19. (لاحظ إننا استخدمنا قيمةxالقديمة لأنهاpostfix). - الخطوة 3 (Evaluation): هنحسب
10 * 19اللي هي190. - الخطوة 4 (Assignment): هنخصص القيمة
190للمتغيرz. - الخطوة 5 (Postfix): عندنا
x++. قيمةxهتزيد 1 وتبقى11.
يبقى النتيجة النهائية: x = 11, y = 19, z = 190.
نصيحة: Microsoft مش بتنصح باستخدام
++أو--جوه تعبيرات معقدة بالشكل ده لأن النتيجة ممكن تكون غير متوقعة لو استخدمت نفس المتغير أكتر من مرة. الأفضل نستخدمهم لوحدهم أو جوهLoops.
Ternary (Conditional) Operator ?:
الـ Ternary Operator هو اختصار لجملة if-else. اسمه Ternary لأنه بياخد 3 أجزاء (operands).
الصيغة بتاعته:
Condition ? first_expression : second_expression;
- الأول بيقيّم الـ
Condition. - لو
true، بينفذ الـfirst_expression. - لو
false، بينفذ الـsecond_expression.
Example
using System;
namespace OperatorsDemo
{
class Program
{
static void Main(string[] args)
{
int a = 20, b = 10, res;
// Check if a is greater than b
// If true, res = a. If false, res = b.
res = (a > b) ? a : b;
Console.WriteLine("Result = " + res); // Output will be 20
Console.ReadKey();
}
}
}Priority of Operators
العمليات في C# ليها أولوية تنفيذ. الأعلى في القائمة بيتنفذ الأول.
- Parentheses
( ) - Function and method calls
- Postfix
x++,x-- - Prefix
++x,--x - Arithmetic Operators (
*,/,%قبل+,-) - Comparison operators
- Logical operators (
&&قبل||) - Conditional operator (Ternary)
? : - Assignment operators
- Null-conditional operators
?.
Boolean Variable Naming
تسمية المتغيرات من نوع Boolean بشكل صحيح بتخلي الكود نظيف ومقروء. فيه شوية إرشادات ممكن نتبعها:
-
استخدام الأفعال المساعدة:
- ابدأ اسم المتغير بكلمات زي
is,has,can,should. ده بيوضح إن المتغير بيمثل حالة. - أمثلة:
isVisible،hasCompleted،canExecute.
- ابدأ اسم المتغير بكلمات زي
-
استخدام أسماء وصفية:
- الاسم لازم يعبر عن الغرض بوضوح.
- مثال:
isAhmedTallerThanAli.
-
تجنب النفي في الأسماء:
- بدل ما تسمي المتغير
isNotVisible، الأفضل تستخدمisHiddenعشان تتجنب اللخبطة.
- بدل ما تسمي المتغير
-
استخدام صيغة السؤال:
- مثال:
isDoorOpenكأنه بيسأل “هل الباب مفتوح؟“.
- مثال:
Practical Example
public class Room
{
public bool IsDoorOpen { get; set; }
public bool HasWindow { get; set; }
public bool CanEnter { get; set; }
public void CheckRoomStatus()
{
if (IsDoorOpen)
{
Console.WriteLine("The door is open.");
}
else
{
Console.WriteLine("The door is closed.");
}
}
}Using Boolean as a Flag
ممكن نستخدم متغير boolean كـ “Flag” عشان نتتبع حالة معينة في البرنامج، زي تفعيل أو تعطيل ميزة. أشهر مثال هو الـ Dark Mode في المواقع.
// The flag to track the current mode
bool isDarkMode = false; // Default is Light Mode
// Function to toggle the theme
void ToggleTheme()
{
// Invert the flag's value
isDarkMode = !isDarkMode;
ApplyTheme();
}
// Function to apply styles based on the flag
void ApplyTheme()
{
if (isDarkMode)
{
// Apply dark mode settings
Console.WriteLine("Theme set to Dark Mode.");
}
else
{
// Apply light mode settings
Console.WriteLine("Theme set to Light Mode.");
}
}استخدام الـ Flag بيساعد في:
- تعقب الحالة: بنبقى عارفين دايماً إيه هو الوضع الحالي.
- تسهيل التغيير: بنقدر نغير الحالة بسهولة عن طريق عكس قيمة الـ
Flag. - تبسيط المنطق: بدل ما نكتب شروط معقدة، بنستخدم متغير
booleanبسيط.
في تطبيقات الويب الحقيقية، ممكن نخزن قيمة الـ Flag ده في الـ Session أو Cookies عشان نحافظ على اختيار المستخدم.