تم تصميم ورقة الغش الشاملة C# لمساعدة المطورين في إتقان بناء الجملة المفتاح والمفاهيم المتعلقة ببرمجة C#.
الهيكل الأساسي
أنواع البيانات
المتغيرات
الثوابت
البيانات الشرطية
حلقات
صفائف
قوائم
القواميس
طُرق
الفصول والكائنات
معالجة الاستثناء
المندوبون والأحداث و lambdas
LINQ (استعلام متكامل للغة)
صفات
غير متزامن/في انتظار
متنوع
معالجة السلسلة
ملف i/o
التاريخ والوقت
الأدوية
Nullables
سمات وانعكاس
طرق التمديد
حقن التبعية
فصول جزئية
قابلية التشغيل البيني
أنواع مجهولة
tuples
مطابقة نمط
الوظائف المحلية
السجلات
مع التعبيرات
فهرسة ونطاقات
باستخدام الإعلان
أنواع مرجعية لاغية (NRTS)
استخدام النمط باستخدام
أنماط الممتلكات
تطبيقات الواجهة الافتراضية
الربط الديناميكي
جميع برامج C# تتبع بنية أساسية ، الموضحة أدناه:
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
بدءًا من .NET 5 ، تقوم البيانات ذات المستوى الأعلى بتبسيط محتوى البرنامج.
Console.WriteLine("Hello, World");
C# يدعم أنواع البيانات المختلفة مثل:
أنواع القيمة: int ، char ، تعويم
الأنواع المرجعية: سلسلة ، فئة ، صفيف
المتغيرات هي أسماء رمزية للقيم:
int age = 30; // integer variable
string name = "John"; // string variable
double PI = 3.14159; // double for floating-point numbers
bool isLoggedIn = true; // boolean variable
استخدم "var" لاستدلال النوع:
var number = 5; // compiler infers type as int
var message = "This is a message"; // compiler infers type as string
الثوابت تحمل قيم غير قابلة للتغيير:
const double GRAVITY = 9.81; // constant for gravitational acceleration
const string COMPANY_NAME = "MyCompany"; // constant company name
تدفق برنامج التحكم على أساس الظروف:
int age = 20;
if (age >= 18)
{
Console.WriteLine("You are eligible to vote.");
}
else
{
Console.WriteLine("You are not eligible to vote.");
}
switch (variable) { /*...*/ } // Switch statement
تنفيذ الكود مرارًا وتكرارًا:
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
foreach (var item in collection) { /*...*/ } // Foreach loop
while (condition) { /*...*/ } // While loop
do { /*...*/ } while (condition); // Do-while loop
مجموعات الحجم الثابت من العناصر:
string[] names = new string[3] { "Alice", "Bob", "Charlie" };
Console.WriteLine(names[1]); // Output: Bob (accessing element at index 1)
مجموعات ديناميكية مماثلة للمصفوفات:
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
foreach (var number in numbers)
{
Console.WriteLine(number);
}
أزواج القيمة الرئيسية لرابطة البيانات:
Dictionary<string, string> phonebook = new Dictionary<string, string>();
phonebook.Add("John Doe", "123-456-7890");
phonebook.Add("Jane Doe", "987-654-3210");
Console.WriteLine(phonebook["John Doe"]); // Output: 123-456-7890
تغليف المنطق القابل لإعادة الاستخدام:
public class Rectangle
{
public double Width { get; set; }
public double Height { get; set; }
public double GetArea()
{
return Width * Height;
}
}
public class Program
{
public static void Main(string[] args)
{
Rectangle rect = new Rectangle();
rect.Width = 5;
rect.Height = 10;
double area = rect.GetArea();
Console.WriteLine($"Area of rectangle: {area}");
}
}
تحدد الفصول مخططات للكائنات:
public class MyClass // Class definition
{
public string PropertyName { get; set; } // Properties store data
public void MethodName() { /*...*/ } // Methods define actions
}
MyClass obj = new MyClass(); // Object creation
إدارة أخطاء وقت التشغيل بأمان:
public static int GetNumberInput()
{
while (true)
{
try
{
Console.WriteLine("Enter a number: ");
string input = Console.ReadLine();
return int.Parse(input);
}
catch (FormatException)
{
Console.WriteLine("Invalid input. Please enter a number.");
}
}
}
public static void Main(string[] args)
{
int number = GetNumberInput();
Console.WriteLine($"You entered: {number}");
}
للبرمجة التي تعتمد على الحدث والتعامل مع الأسلوب:
public delegate void MyDelegate(); // Delegate declaration
event MyDelegate MyEvent; // Event declaration
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main(string[] args)
{
List<Person> people = new List<Person>()
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 40 },
};
people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name));
foreach (var person in people)
{
Console.WriteLine(person.Name); // Output: Alice, Bob, Charlie (sorted by name)
}
}
قدرات الاستعلام لمعالجة البيانات:
using System.Linq;
public static void Main(string[] args)
{
List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(x => x % 2 == 0);
foreach (var number in evenNumbers)
{
Console.WriteLine(number); // Output: 2, 4, 6
}
}
أضف بيانات التعريف إلى عناصر الرمز:
[Obsolete("Use the new DoSomethingV2 method instead.")]
public void DoSomething()
{
// Implementation here
}
public void DoSomethingV2()
{
// New and improved implementation
}
لتنفيذ رمز عدم الحظر:
using System.Threading.Tasks;
public static async Task DownloadFileAsync(string url, string filePath)
{
// Simulate downloading data asynchronously
await Task.Delay(2000); // Simulate a 2-second download
// Write downloaded data to the file
File.WriteAllText(filePath, "Downloaded content");
Console.WriteLine($"File downloaded to: {filePath}");
}
public static void Main(string[] args)
{
string url = "https://example.com/data.txt";
string filePath = "downloaded_data.txt";
DownloadFileAsync(url, filePath);
// Continue program execution while download happens in the background
Console.WriteLine("Downloading file...");
Console.WriteLine("Meanwhile, you can do other things...");
}
ميزات لغة إضافية:
التعداد ، واجهة ، فئة ، سجل ، بنية
ديناميكية ، هي ، as ، var ، nameof
طرق معالجة السلسلة القوية:
string.Concat(); // Combine strings
string.Join(); // Join elements
str.Split(); // Split string
str.ToUpper(); // Convert to uppercase
str.ToLower(); // Convert to lowercase
العمليات مع الملفات:
using System.IO; // Required for File I/O
File.ReadAllText(path); // Read file content
File.WriteAllText(path, content); // Write to file
File.Exists(path); // Check file existence
معالجة التاريخ والوقت:
using System;
public static void Main(string[] args)
{
DateTime startDate = DateTime.Parse("2024-03-10");
DateTime endDate = DateTime.Now;
TimeSpan difference = endDate - startDate;
Console.WriteLine($"Time difference: {difference.Days} days, {difference.Hours} hours");
}
هياكل البيانات الآمنة من النوع:
public class Stack<T>
{
private List<T> items = new List<T>();
public void Push(T item)
{
items.Add(item);
}
public T Pop()
{
T item = items[items.Count - 1];
items.RemoveAt(items.Count - 1);
return item;
}
}
public static void Main(string[] args)
{
Stack<string> messages = new Stack<string>();
messages.Push("Hello");
messages.Push("World");
string message = messages.Pop();
Console.WriteLine(message); // Output: World
}
السماح بأن أنواع القيمة لاغية:
int? nullableInt = null; // Nullable integer
البيانات الوصفية ونوع التأمل:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main(string[] args)
{
Type personType = typeof(Person);
PropertyInfo[] properties = personType.GetProperties();
foreach (PropertyInfo property in properties)
{
Console.WriteLine(property.Name); // Output: Name, Age
}
}
أضف طرقًا إلى الأنواع الموجودة:
public static class StringExtensions
{
public static string ToUppercase(this string str)
{
return str.ToUpper();
}
}
public static void Main(string[] args)
{
string message = "Hello, world!";
string uppercased = message.ToUppercase(); // Using the extension method
Console.WriteLine(uppercased); // Output: HELLO, WORLD!
}
تصميم الرمز المزدوج بشكل فضفاض:
public interface ILogger
{
void LogMessage(string message);
}
public class MyService
{
private readonly ILogger _logger;
public MyService(ILogger logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.LogMessage("Doing something...");
}
}
// Implementing the ILogger interface (example)
public class ConsoleLogger : ILogger
{
public void LogMessage(string message)
{
Console.WriteLine(message);
}
}
public static void Main(string[] args)
{
ILogger logger = new ConsoleLogger();
MyService service = new MyService(logger);
service.DoSomething();
}
تقسيم تعريف فئة واحدة:
public partial class MyClass { /*...*/ } // Partial class definition
interop مع لغات أخرى:
using System;
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);
public static void Main(string[] args)
{
MessageBox(IntPtr.Zero, "Hello from C#!", "Interop Example", 0);
}
إنشاء أنواع لم يتم تحديد اسمها: رمز csharpcopy
var person = new { Name = "John", Age = 30 };
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
هياكل البيانات مع عدد محدد من العناصر:
(string Name, int Age) person = ("Alice", 30);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // Accessing elements using Item1 and Item2
يبسط مهام البرمجة معينة:
object obj = new Person { Name = "Bob", Age = 25 };
if (obj is Person { Name: "Bob", Age >= 18 })
{
Console.WriteLine("Bob is an adult.");
}
تغليف المنطق في الطرق:
public static int Calculate(int number)
{
int Factorial(int n)
{
if (n == 0) return 1;
return n * Factorial(n - 1);
}
return Factorial(number);
}
public static void Main(string[] args)
{
int result = Calculate(5);
Console.WriteLine($"5! = {result}");
}
بناء جملة موجز للأنواع المرجعية:
public record Person(string Name, int Age);
public static void Main(string[] args)
{
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Alice", 30);
// Records provide default equality comparison
if (person1 == person2)
{
Console.WriteLine("People are equal");
}
}
طفرة غير تدمير للسجلات:
var john = new Person("John", 30);
var jane = john with { Name = "Jane" }; // Non-destructive mutation
الوصول المرن للبيانات:
int[] arr = {0, 1, 2, 3, 4, 5};
var subset = arr[1..^1]; // Indexer and range usage
التخلص من الكائنات القابلة للإحالة:
using var reader = new StreamReader("file.txt"); // using declaration
تجنب الاستثناءات المرجعية الخالية:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main(string[] args)
{
Person person = new Person() { Age = 30 };
// NRTs require null checks before accessing properties
if (person?.Name != null)
{
Console.WriteLine(person.Name);
}
else
{
Console.WriteLine("Name is null");
}
}
المزيد من الأنماط في العبارة باستخدام:
public ref struct ResourceWrapper { /*...*/ } // Resource wrapper
using var resource = new ResourceWrapper(); // Pattern-based using
تفكيك الكائنات في مطابقة الأنماط:
if (obj is Person { Name: "John", Age: var age }) { /*...*/ } // Property pattern matching
واجهات مع تطبيقات الطريقة الافتراضية:
public interface IPerson { /*...*/ } // Interface with default method
public class MyClass : IPerson { /*...*/ } // Class implementing interface
دقة نوع وقت التشغيل:
dynamic d = 5; // Dynamic binding
d = "Hello"; // No compile-time type checking
تختتم ورقة الغش المنظمة هذه بمواضيع وتقنيات متقدمة ، مما يوفر مرجعًا شاملاً للمطورين الذين يهدفون إلى تعزيز مهارات البرمجة C#. للحصول على أمثلة مفصلة ومزيد من الاستكشاف ، راجع الأقسام المحددة الموضحة في هذا الدليل. ترميز سعيد!
مستوحاة من: https://zerotomastery.io/cheatsheets/csharp-cheat-seet/#constants