0Pricing
C# Academy · درس

التقاط المعاملات في الأعضاء

استخدموا معاملات الباني الأساسي في النوع بأكمله

التقاط المعاملات في الأعضاء درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

استخدام المعاملات في الأعضاء

تكمن قوة المنشئات الأساسية في استخدام المعاملات داخل الأعضاء: الأساليب والخصائص ومهيئات الحقول. ويتولى المترجم ترتيب التخزين حسب الحاجة.

using System;

class Multiplier(int factor) {
    public int Apply(int n) => n * factor;
}

Console.WriteLine(new Multiplier(3).Apply(5)); // 15

الالتقاط في مقابل التهيئة فقط

إذا استُخدم المعامل في مهيئ حقل أو خاصية فقط، فلن تكون هناك حاجة إلى مساحة تخزين إضافية. أما إذا استُخدم في أسلوب، فيلتقطه المترجم في حقل مخفي.

using System;

class A(int x) {
    public int Stored = x;     // initializer only
}
class B(int x) {
    public int Get() => x;     // captured into a field
}

Console.WriteLine(new A(7).Stored); // 7
Console.WriteLine(new B(9).Get());  // 9

المعاملات قابلة للتغيير

تتصرف معاملات المنشئ الأساسي مثل المعاملات العادية: فهي قابلة للتغيير داخل النسخة ما لم تتعامل معها على أنها للقراءة فقط. ويؤدي تغيير أحدها إلى تغيير الحقل الملتقط.

using System;

class Toggle(bool on) {
    public void Flip() => on = !on;
    public bool State => on;
}

var t = new Toggle(false);
t.Flip();
Console.WriteLine(t.State); // True

كشفها كخصائص للقراءة فقط

من الأنماط الشائعة كشف المعامل من خلال خاصية لا تتضمن سوى get، مما يوفر واجهة عامة نظيفة مع إبقاء المعامل داخليًا.

using System;

class User(string email) {
    public string Email { get; } = email;
}

Console.WriteLine(new User("a@b.com").Email); // a@b.com

الخصائص المحسوبة من المعاملات

تدخل المعاملات بصورة طبيعية في الخصائص المحسوبة ذات جسم التعبير.

using System;

class Money(decimal amount, string currency) {
    public string Display => amount.ToString("0.00") + " " + currency;
}

Console.WriteLine(new Money(9.5m, "USD").Display); // 9.50 USD

المعاملات في أساليب متعددة

يمكن مشاركة المعامل الملتقط نفسه بين عدة أساليب، بحيث يعمل مثل حقل خاص تتم تهيئته عند الإنشاء.

using System;

class Range2(int lo, int hi) {
    public bool Contains(int n) => n >= lo && n <= hi;
    public int Clamp(int n) => Math.Max(lo, Math.Min(hi, n));
}

var r = new Range2(0, 10);
Console.WriteLine(r.Contains(5)); // True
Console.WriteLine(r.Clamp(15));   // 10

التقاط الأنواع المرجعية

تتيح لكم معلمات الأنواع المرجعية المُلتقطة تخزين التبعيات المُحقنة واستدعاءها من أي أسلوب.

using System;
using System.Collections.Generic;

class Repo(List<string> store) {
    public void Add(string item) => store.Add(item);
    public int Count => store.Count;
}

var list = new List<string>();
var repo = new Repo(list);
repo.Add("x");
Console.WriteLine(repo.Count); // 1

تجنّب التخزين المزدوج غير المقصود

إذا أسندتم معلمة إلى حقل واستخدمتم المعلمة في الأساليب، فقد ينتهي بكم الأمر إلى تخزين القيمة مرتين. فضّلوا أسلوبًا واحدًا لتوضيح الكود.

using System;

class Clean(int x) {
    // expose once via property, reference property in methods
    public int Value { get; } = x;
    public int Doubled() => Value * 2;
}

Console.WriteLine(new Clean(4).Doubled()); // 8

المعلمات في تعبيرات Lambda

يمكن التقاط المعلمات بواسطة تعبيرات Lambda المُعرّفة داخل الفئة، تمامًا مثل الحقول.

using System;
using System.Collections.Generic;
using System.Linq;

class Filter(int threshold) {
    public IEnumerable<int> KeepAbove(IEnumerable<int> xs) =>
        xs.Where(n => n > threshold);
}

var f = new Filter(3);
Console.WriteLine(string.Join(",", f.KeepAbove(new[]{1,2,3,4,5}))); // 4,5

عمر النطاق

تظل المعلمة المُلتقطة موجودة طوال مدة حياة الكائن. وهي عمليًا حالة للمثيل، لذلك لا تفترضوا إعادة ضبطها بين استدعاءات الأساليب.

using System;

class Accumulator(int seed) {
    private int total = seed;
    public int Add(int n) { total += n; return total; }
}

var a = new Accumulator(100);
Console.WriteLine(a.Add(1)); // 101
Console.WriteLine(a.Add(1)); // 102

تجميع المفاهيم

تلتقط هذه الخدمة تبعيتين وتستخدمهما عبر عدة أساليب، لتوضيح الشكل المعتاد في التطبيقات الواقعية.

using System;

class PriceService(decimal taxRate, string currency) {
    public decimal WithTax(decimal net) => net * (1 + taxRate);
    public string Format(decimal v) => v.ToString("0.00") + " " + currency;
}

var s = new PriceService(0.2m, "EUR");
Console.WriteLine(s.Format(s.WithTax(100m))); // 120.00 EUR

تحقق سريع

تحققوا من كيفية تخزين معلمات المُنشئ الأساسي.

مراجعة

تعلّمتم كيفية استخدام معلمات المُنشئ الأساسي في الأعضاء.

  • عند استخدامها في الأساليب، تُلتقط المعلمات في حقول مخفية.
  • عند استخدامها في المُهيِّئات فقط، لا تكون هناك حاجة إلى تخزين إضافي.
  • اعرضوها عبر خصائص للقراءة فقط للحصول على واجهة نظيفة.
  • تتصرف كحالة للمثيل طوال مدة حياة الكائن.

الأسئلة الشائعة

هل درس «التقاط المعاملات في الأعضاء» مجاني؟

نعم — نص درس «التقاط المعاملات في الأعضاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «التقاط المعاملات في الأعضاء»؟

استخدموا معاملات الباني الأساسي في النوع بأكمله تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التقاط المعاملات في الأعضاء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. البُناة الأساسيون في الفئات
  2. التقاط المعاملات في الأعضاء
  3. البُناة الأساسيون مع Structs
  4. الدمج مع الخصائص والأنواع الأساسية
← العودة إلى C# Academy