اگر توسعهدهنده جاوا هستید، در راه استفاده از مهارتها جاوا یا سی شارپ برای اندروید و کدهای موجود در پلتفرم Xamarin و در عین حال بهرهمندی از مزایای استفاده مجدد از کد C # هستید. متوجه خواهید شد که نحو C# بسیار شبیه به جاوا یا سی شارپ برای اندروید نحو جاوا است و هر دو زبان ویژگی های بسیار مشابهی را ارائه می دهند. علاوه بر این، ویژگی های منحصر به فرد C# را کشف خواهید کرد که زندگی توسعه شما را جاوا یا سی شارپ برای اندروید آسان تر می کند.
این مقاله مقدمه ای بر برنامه نویسی C # برای توسعه دهندگان جاوا ارائه می دهد، که در درجه اول جاوا یا سی شارپ برای اندروید بر ویژگی های زبان C # که هنگام توسعه برنامه های Xamarin.Android با آن ها مواجه خواهید شد، تمرکز می کند. همچنین، این مقاله توضیح میدهد که این ویژگیها چگونه با همتایان جاوا خود متفاوت هستند و ویژگیهای مهم C# (مربوط به Xamarin.Android) را که در جاوا در دسترس نیستند، معرفی میکند. پیوندهایی به مواد مرجع اضافی گنجانده شده است، بنابراین می توانید از این مقاله به عنوان یک نقطه “پرش” برای مطالعه بیشتر C # و .NET استفاده کنید.
پیشنهاد می کنیم به مشاهده مقاله زبان سی شارپ یا جاوا بپردازید.
جاوا یا سی شارپ برای اندروید
اگر با جاوا آشنا هستید، با سینتکس سی شارپ فورا احساس راحتی می کنید. سی # سینتکس جاوا یا سی شارپ برای اندروید بسیار شبیه به نحو جاوا است – C # یک زبان “پرانتز فرفری” مانند جاوا، C و C ++ است. از بسیاری جهات، سینتکس #C مانند یک ابرمجموعه از نحو جاوا خوانده می شود، اما با چند کلمه کلیدی تغییر نام یافته و اضافه شده است.بسیاری از ویژگی های کلیدی جاوا را می توان در سی شارپ یافت:برنامه نویسی شی گرا مبتنی بر کلاس تایپ قوی.
هر دو جاوا و C # به یک زبان میانی که در یک محیط اجرای مدیریت شده اجرا می شود، کامپایل جاوا یا سی شارپ برای اندروید می شوند. C# و Java هر دو به صورت ایستا تایپ می شوند و هر دو زبان رشته ها را به عنوان انواع غیرقابل تغییر در نظر می گیرند. هر دو زبان از یک سلسله مراتب کلاسی تک ریشه استفاده می کنند. مانند جاوا، سی # فقط از وراثت تکی پشتیبانی می کند و به روش های جهانی اجازه نمی دهد. در هر دو زبان، اشیاء با استفاده از کلمه کلیدی جدید روی پشته ایجاد میشوند و وقتی دیگر از آنها استفاده نمیشود، اشیاء به صورت زباله جمعآوری میشوند.
پیشنهاد می کنیم به مشاهده مقاله سی شارپ یا پایتون بپردازید.
هر دو زبان پشتیبانی رسمی رسیدگی به استثناء را با معناشناسی try/catch ارائه می کنند. هر جاوا یا سی شارپ برای اندروید دو پشتیبانی از مدیریت رشته و هماهنگ سازی را ارائه می دهند.با این حال، تفاوت های زیادی بین جاوا و C# وجود دارد. مثلا:جاوا (همانطور که در اندروید استفاده می شود) از متغیرهای محلی تایپ شده ضمنی پشتیبانی نمی کند (C# از کلمه کلیدی var پشتیبانی می کند).در جاوا، شما می توانید پارامترها را فقط بر اساس مقدار ارسال کنید، در حالی که در C# می توانید با مرجع و همچنین ارزش ارسال کنید.
(C# کلیدواژههای ref و out را برای ارسال پارامترها با مرجع ارائه میکند؛ هیچ معادلی برای آنها جاوا یا سی شارپ برای اندروید در جاوا وجود ندارد).جاوا از دستورالعمل های پیش پردازنده مانند #define پشتیبانی نمی کند.جاوا از انواع عدد صحیح بدون علامت پشتیبانی نمی کند، در حالی که C# انواع صحیح بدون علامت مانند ulong، uint، ushort و byte را ارائه می دهد.جاوا از بارگذاری بیش از حد اپراتور پشتیبانی نمی کند. در C# می توانید اپراتورها و تبدیل ها را بیش از حد بارگذاری کنید.
در دستور سوئیچ جاوا، کد میتواند به بخش سوئیچ بعدی بیفتد، اما در C# انتهای هر بخش سوئیچ باید جاوا یا سی شارپ برای اندروید سوئیچ را خاتمه دهد (انتهای هر بخش باید با یک دستور break بسته شود).در جاوا، استثناهای پرتاب شده توسط یک متد را با کلمه کلیدی throws مشخص میکنید، اما C# مفهومی از استثناهای بررسی شده ندارد – کلمه کلیدی throws در C # پشتیبانی نمیشود.C# از Query یکپارچه با زبان (LINQ) پشتیبانی میکند، که به شما امکان میدهد از کلمات رزرو شده از، انتخاب، و محل نوشتن پرسوجوها در برابر مجموعهها به روشی مشابه پرسوجوهای پایگاه داده استفاده کنید.
البته تفاوت های بین C# و جاوا بسیار بیشتر از آن چیزی است که در این مقاله به آن پرداخته شود. جاوا یا سی شارپ برای اندروید همچنین، جاوا و C # هر دو به تکامل خود ادامه می دهند (به عنوان مثال، جاوا 8، که هنوز در زنجیره ابزار اندروید قرار ندارد، از عبارات لامبدا به سبک C # پشتیبانی می کند) بنابراین این تفاوت ها در طول زمان تغییر خواهند کرد. تنها مهمترین تفاوتهایی که در حال حاضر توسط توسعهدهندگان جاوا تازه وارد Xamarin.Android با آنها مواجه شدهاند، در اینجا شرح داده شدهاند.
رفتن از جاوا به توسعه C # مقدمه ای برای تفاوت های اساسی بین C # و جاوا فراهم می کند.ویژگی های برنامه نویسی شی گرا جاوا یا سی شارپ برای اندروید مهمترین تفاوت های ویژگی شی گرا بین این دو زبان را تشریح می کند.Keyword Differences جدولی از معادل های مفید کلمه کلیدی، کلمات کلیدی فقط C# و پیوندهایی به تعاریف کلیدواژه C# ارائه می دهد.C# بسیاری از ویژگی های کلیدی را برای Xamarin.Android به ارمغان می آورد که در حال حاضر به راحتی برای توسعه دهندگان جاوا در اندروید در دسترس نیستند.
این ویژگی ها می توانند به شما کمک کنند تا در زمان کمتری کد بهتری بنویسید:Properties – با سیستم جاوا یا سی شارپ برای اندروید خصوصیت C #، می توانید بدون نیاز به نوشتن متدهای تنظیم کننده و دریافت کننده، به طور ایمن و مستقیم به متغیرهای عضو دسترسی داشته باشید.عبارات لامبدا – در سی شارپ میتوانید از روشهای ناشناس (که لامبدا نیز نامیده میشود) استفاده کنید تا عملکرد خود را مختصرتر و کارآمدتر بیان کنید. شما می توانید از سربار نوشتن اشیاء یک بار مصرف اجتناب کنید و می توانید حالت محلی را بدون نیاز به افزودن پارامتر به یک متد منتقل کنید.
Event Handling – C# پشتیبانی در سطح زبان را برای برنامهنویسی رویداد محور فراهم میکند، جایی که جاوا یا سی شارپ برای اندروید یک شی میتواند ثبت نام کند تا زمانی که رویداد مورد علاقه رخ میدهد مطلع شود. کلمه کلیدی رویداد مکانیزم پخش چندپخشی را تعریف می کند که یک کلاس ناشر می تواند از آن برای اطلاع مشترکین رویداد استفاده کند.برنامه نویسی ناهمزمان – ویژگی های برنامه نویسی ناهمزمان C # (ناهمگام / منتظر) برنامه ها را پاسخگو نگه می دارد. پشتیبانی از این ویژگی در سطح زبان، اجرای برنامهنویسی غیرهمگام را آسان و کمتر مستعد خطا میکند.
در نهایت، Xamarin به شما این امکان را می دهد که از طریق فناوری موسوم به binding از دارایی جاوا یا سی شارپ برای اندروید های جاوا موجود استفاده کنید. با استفاده از ژنراتورهای اتصال خودکار Xamarin می توانید کد جاوا، چارچوب ها و کتابخانه های موجود خود را از C# فراخوانی کنید. برای انجام این کار، شما به سادگی یک کتابخانه استاتیک در جاوا ایجاد کرده و آن را از طریق یک binding در معرض C# قرار دهید.توجه داشته باشیدبرنامه نویسی اندروید از نسخه خاصی از زبان جاوا استفاده می کند که از تمام ویژگی های جاوا 7 و زیر مجموعه ای از جاوا 8 پشتیبانی می کند.
برخی از ویژگیهای ذکر شده در این صفحه (مانند کلمه کلیدی var در C#) در نسخههای جدیدتر جاوا یا سی شارپ برای اندروید جاوا (مانند var در جاوا 10) موجود هستند، اما هنوز برای توسعهدهندگان اندروید در دسترس نیستند.رفتن از جاوا به توسعه C #بخشهای زیر به تشریح تفاوتهای اساسی «شروع به کار» بین C # و جاوا میپردازند. بخش بعدی تفاوت های شی گرا بین این زبان ها را شرح می دهد.کتابخانه ها در مقابل مجامع جاوا معمولاً کلاس های مرتبط را در فایل های jar بسته بندی می کند.
با این حال، در سی شارپ و داتنت، بیتهای قابل استفاده مجدد از کدهای از پیش کامپایل شده در جاوا یا سی شارپ برای اندروید مجموعههایی بستهبندی میشوند که معمولاً به صورت فایلهای dll. بستهبندی میشوند. یک اسمبلی واحد استقرار برای C # / کد NET است و هر اسمبلی معمولاً با یک پروژه C # مرتبط است. اسمبلی ها حاوی کد میانی (IL) هستند که در زمان اجرا به موقع کامپایل می شوند.بسته ها در مقابل فضاهای نام C# از کلمه کلیدی فضای نام برای گروه بندی انواع مرتبط با هم استفاده می کند.
این شبیه کلمه کلیدی بسته جاوا است. به طور معمول، یک برنامه Xamarin.Android در فضای نامی جاوا یا سی شارپ برای اندروید که برای آن برنامه ایجاد شده است قرار می گیرد. به عنوان مثال، کد C# زیر پوشش فضای نام WeatherApp را برای یک برنامه گزارش آب و هوا اعلام می کند:هنگامی که از انواع تعریف شده در فضای نام خارجی استفاده می کنید، این انواع را با یک دستور use (که بسیار شبیه به دستور import Java است) وارد می کنید.
دستور استفاده از C# به روشی بسیار مشابه کار می کند، اما به شما امکان می دهد یک بسته کامل را بدون جاوا یا سی شارپ برای اندروید مشخص کردن علامت عام وارد کنید. به عنوان مثال، همانطور که در این مثال مشاهده می شود، اغلب در ابتدای فایل های منبع Xamarin.Android یک سری دستورات استفاده می بینید:ژنریک ها هر دو جاوا و C# از ژنریک ها پشتیبانی می کنند، که مکان هایی هستند که به شما امکان می دهند انواع مختلف را در زمان کامپایل وصل کنید.
با این حال، ژنریک ها در C# کمی متفاوت عمل می کنند. در جاوا، نوع پاک کردن اطلاعات نوع را فقط در جاوا یا سی شارپ برای اندروید زمان کامپایل در دسترس قرار می دهد، اما نه در زمان اجرا. در مقابل، زمان اجرا زبان مشترک دات نت (CLR) پشتیبانی صریح از انواع عمومی را فراهم می کند، به این معنی که C# در زمان اجرا به اطلاعات نوع دسترسی دارد. در توسعه روزمره Xamarin.Android، اهمیت این تمایز اغلب آشکار نمی شود، اما اگر از بازتاب استفاده می کنید، برای دسترسی به اطلاعات نوع در زمان اجرا به این ویژگی وابسته خواهید بود.
در Xamarin.Android، اغلب روش عمومی FindViewById را می بینید که برای دریافت ارجاع به کنترل جاوا یا سی شارپ برای اندروید طرح بندی استفاده می شود. این روش یک پارامتر نوع عمومی را می پذیرد که نوع کنترل را برای جستجو مشخص می کند. مثلا:برای اطلاعات بیشتر در مورد ژنریک، به مبحث Generics مراجعه کنید. توجه داشته باشید که محدودیتهایی در پشتیبانی Xamarin.Android برای کلاسهای C # عمومی وجود دارد. برای اطلاعات بیشتر، محدودیت ها را ببینید.
ویژگی های برنامه نویسی شی گرا.هم جاوا و هم C# از اصطلاحات برنامه نویسی شی گرا بسیار جاوا یا سی شارپ برای اندروید مشابه استفاده می کنند:تمام کلاس ها در نهایت از یک شی ریشه منفرد مشتق می شوند – همه اشیاء جاوا از ava.lang.Object مشتق می شوند، در حالی که تمام اشیاء C # از System.Object مشتق می شوند.نمونه های کلاس ها انواع مرجع هستند.هنگامی که به ویژگی ها و متدهای یک نمونه دسترسی دارید، از “.” استفاده می کنید. اپراتور.
تمام نمونه های کلاس از طریق عملگر جدید روی پشته ایجاد می شوند.از آنجایی که هر دو زبان از جاوا یا سی شارپ برای اندروید جمعآوری زباله استفاده میکنند، هیچ راهی برای آزاد کردن اشیاء استفاده نشده به صراحت وجود ندارد (به عنوان مثال، کلمه کلیدی حذف مانند C ++ وجود ندارد).میتوانید کلاسها را از طریق وراثت گسترش دهید، و هر دو زبان فقط یک کلاس پایه را برای هر نوع مجاز میکنند.شما می توانید رابط ها را تعریف کنید، و یک کلاس می تواند از تعاریف چند رابط (یعنی پیاده سازی) به ارث ببرد.
با این حال، برخی از تفاوت های مهم نیز وجود داردارنس ها:جاوا دو ویژگی قدرتمند دارد که C# از آنها پشتیبانی جاوا یا سی شارپ برای اندروید نمی کند: کلاس های ناشناس و کلاس های داخلی. (با این حال، C # اجازه می دهد تا تعاریف کلاس را تودرتو قرار دهد – کلاس های تو در تو C # مانند کلاس های تودرتو ایستا جاوا هستند.)C# از انواع ساختار به سبک C (struct) پشتیبانی می کند در حالی که جاوا این کار را نمی کند.در سی شارپ، می توانید با استفاده از کلمه کلیدی جزئی، تعریف کلاس را در فایل های منبع جداگانه پیاده سازی کنید.
رابط های C # نمی توانند فیلدها را اعلام کنند.C# برای بیان نهایی کننده ها از نحو مخرب سبک C ++ – استفاده جاوا یا سی شارپ برای اندروید می کند. نحو با روش نهایی جاوا متفاوت است، اما معنایی تقریباً یکسان است. (توجه داشته باشید که در C #، تخریبکنندهها بهطور خودکار تخریبگر کلاس پایه را فراخوانی میکنند – برخلاف جاوا که از فراخوانی صریح به super.finalize استفاده میشود.)وراثت طبقاتی برای گسترش یک کلاس در جاوا، از کلمه کلیدی extends استفاده می کنید.
برای گسترش یک کلاس در C #، از دو نقطه (:) برای نشان دادن مشتق استفاده می کنید. برای مثال، در جاوا یا سی شارپ برای اندروید برنامههای Xamarin.Android، اغلب مشتقات کلاسی را میبینید که شبیه قطعه کد زیر است:برای اعلام پشتیبانی از یک رابط در جاوا، از کلمه کلیدی implements استفاده می کنید. با این حال، در C #، همانطور که در این قطعه کد نشان داده شده است، شما به سادگی نام های واسط را به لیست کلاس هایی که باید از آنها ارث بری کنید اضافه می کنید.
در این مثال، SensorsActivity از Activity به ارث برده و عملکرد اعلام شده در رابط ISensorEventListener را پیاده سازی جاوا یا سی شارپ برای اندروید می کند. توجه داشته باشید که لیست اینترفیس ها باید بعد از کلاس پایه آمده باشد (در غیر این صورت با خطای زمان کامپایل مواجه خواهید شد). طبق قرارداد، نام های رابط C # با حروف بزرگ “I” اضافه می شوند. این امکان را فراهم می کند تا بدون نیاز به کلمه کلیدی پیاده سازی، تعیین کنیم که کدام کلاس ها رابط هستند.
هنگامی که می خواهید از زیر کلاسه شدن یک کلاس در C # جلوگیری کنید، قبل از نام کلاس با مهر و موم قرار جاوا یا سی شارپ برای اندروید می دهید – در جاوا، قبل از نام کلاس با final قرار می دهید.برای اطلاعات بیشتر در مورد تعاریف کلاس C #، به مباحث کلاس ها و ارث بری مراجعه کنید.خواص در جاوا، متدهای mutator (setter) و متدهای inspector (getters) اغلب برای کنترل نحوه ایجاد تغییرات در اعضای کلاس در حالی که این اعضا را از کدهای خارجی مخفی و محافظت می کنند، استفاده می شود.
به عنوان مثال، کلاس Android TextView متدهای getText و setText را ارائه می دهد. C# مکانیزمی مشابه جاوا یا سی شارپ برای اندروید اما مستقیمتر را ارائه میکند که به عنوان خواص شناخته میشود. کاربران یک کلاس C# می توانند به یک ویژگی به همان روشی که به یک فیلد دسترسی دارند دسترسی داشته باشند، اما هر دسترسی در واقع منجر به فراخوانی متدی می شود که برای تماس گیرنده شفاف است. این روش «زیر پوشش» میتواند عوارض جانبی مانند تنظیم مقادیر دیگر، انجام تبدیل یا تغییر وضعیت شی را اعمال کند.
از ویژگی ها اغلب برای دسترسی و اصلاح اعضای شی UI (رابط کاربری) استفاده می شود. مثلا:در این جاوا یا سی شارپ برای اندروید مثال، مقادیر عرض و ارتفاع از شی rurView با دسترسی به ویژگیهای MeasuredWidth و MeasuredHeight خوانده میشوند. هنگامی که این ویژگی ها خوانده می شوند، مقادیر مربوط به مقادیر فیلد مرتبط (اما پنهان) آنها در پشت صحنه واکشی شده و به تماس گیرنده بازگردانده می شود. شی rulerView ممکن است مقادیر عرض و ارتفاع را در یک واحد اندازه گیری (مثلاً پیکسل) ذخیره کند.
جاوا یا سی شارپ برای اندروید؟
و زمانی که ویژگی های MeasuredWidth و MeasuredHeight هستند، این مقادیر را در لحظه به یک جاوا یا سی شارپ برای اندروید واحد اندازه گیری متفاوت (مثلاً میلی متر) تبدیل کند. دسترسی پیدا کرد.شی rulerView همچنین دارای خاصیتی به نام DrawingCacheEnabled است – کد مثال این ویژگی را درست تنظیم می کند تا کش ترسیم در rulerView فعال شود. در پشت صحنه، یک فیلد پنهان مرتبط با مقدار جدید بهروزرسانی میشود و احتمالاً سایر جنبههای حالت rulerView اصلاح میشوند.
به عنوان مثال، زمانی که DrawingCacheEnabled روی false تنظیم شده است، rulerView ممکن است اطلاعات جاوا یا سی شارپ برای اندروید کش ترسیمی که قبلاً در شی انباشته شده است را پاک کند.دسترسی به ویژگی ها می تواند خواندنی/نوشتنی، فقط خواندنی یا فقط نوشتنی باشد. همچنین می توانید از اصلاح کننده های دسترسی مختلف برای خواندن و نوشتن استفاده کنید. به عنوان مثال، می توانید یک ویژگی را تعریف کنید که دارای دسترسی خواندن عمومی اما دسترسی نوشتن خصوصی باشد.
فراخوانی متدهای کلاس پایه برای فراخوانی سازنده کلاس پایه در C #، از یک دونقطه (:) به دنبال کلمه جاوا یا سی شارپ برای اندروید کلیدی پایه و یک لیست اولیه استفاده می کنید. این فراخوانی سازنده پایه بلافاصله بعد از لیست پارامترهای سازنده مشتق شده قرار می گیرد. سازنده کلاس پایه هنگام ورود به سازنده مشتق شده فراخوانی می شود. کامپایلر فراخوانی را به سازنده پایه در شروع بدنه متد وارد می کند. قطعه کد زیر یک سازنده پایه را نشان می دهد که از یک سازنده مشتق شده در یک برنامه Xamarin.Android فراخوانی شده است:
نشان داده شده در این مثال، آرگومان متنی را می پذیرد و آن را از طریق فراخوانی پایه (context) به جاوا یا سی شارپ برای اندروید سازنده ViewGroup ارسال می کند.برای فراخوانی یک متد کلاس پایه در C#، از کلمه کلیدی پایه استفاده کنید. برای مثال، برنامههای Xamarin.Android اغلب با روشهای پایه تماس میگیرند، همانطور که در اینجا نشان داده شده است:اصلاح کننده های دسترسی جاوا و C# هر دو از اصلاح کننده های دسترسی عمومی، خصوصی و محافظت شده پشتیبانی می کنند. با این حال، C # از دو اصلاح کننده دسترسی اضافی پشتیبانی می کند:
داخلی – عضو کلاس فقط در اسمبلی فعلی قابل دسترسی است.محافظت داخلی – عضو کلاس در اسمبلی جاوا یا سی شارپ برای اندروید تعریف کننده، کلاس تعریف کننده و کلاس های مشتق شده قابل دسترسی است (کلاس های مشتق شده در داخل و خارج از اسمبلی دسترسی دارند).برای اطلاعات بیشتر در مورد تغییر دهنده های دسترسی C #، به مبحث Access Modifiers مراجعه کنید.روش های مجازی و نادیده گرفتن هر دو جاوا و C# از پلی مورفیسم پشتیبانی می کنند.
یعنی توانایی برخورد با اشیاء مرتبط به یک روش. در هر دو زبان، می توانید از یک مرجع کلاس پایه جاوا یا سی شارپ برای اندروید برای ارجاع به یک شیء کلاس مشتق شده استفاده کنید، و متدهای یک کلاس مشتق شده می توانند متدهای کلاس های پایه آن را لغو کنند. هر دو زبان مفهوم متد مجازی را دارند، متدی در یک کلاس پایه که برای جایگزینی با متدی در کلاس مشتق شده طراحی شده است. C# مانند جاوا از کلاس ها و متدهای انتزاعی پشتیبانی می کند.
با این حال، تفاوت هایی بین جاوا و C# در نحوه اعلان متدهای مجازی و لغو آنها وجود دارد:در #C، متدها جاوا یا سی شارپ برای اندروید به طور پیش فرض غیر مجازی هستند. کلاس های والد باید به صراحت برچسب گذاری کنند که کدام روش باید با استفاده از کلمه کلیدی مجازی لغو شود. در مقابل، تمام متدهای جاوا به طور پیش فرض متدهای مجازی هستند.برای جلوگیری از نادیده گرفتن یک روش در #C، شما به سادگی کلمه کلیدی مجازی را کنار بگذارید. در مقابل، جاوا از کلمه کلیدی نهایی برای علامتگذاری یک روش با عبارت “Oride is not allow” استفاده میکند.
کلاس های مشتق شده C# باید از کلمه کلیدی override استفاده کنند تا به صراحت نشان دهند که یک جاوا یا سی شارپ برای اندروید متد کلاس پایه مجازی در حال نادیده گرفتن است.برای اطلاعات بیشتر در مورد پشتیبانی C# از چند شکلی، به مبحث Polymorphism مراجعه کنید.عبارات لامبدا C# امکان ایجاد بستهها را فراهم میکند: روشهای درون خطی و ناشناس که میتوانند به وضعیت متدی که در آن محصور شدهاند دسترسی داشته باشند. با استفاده از عبارات لامبدا، می توانید خطوط کمتری کد بنویسید تا همان عملکردی را که ممکن است در جاوا با خطوط کد بسیار بیشتری پیاده سازی کرده اید، پیاده سازی کنید.
عبارات لامبدا این امکان را برای شما فراهم می کند که از مراسم اضافی مربوط به ایجاد یک کلاس یک جاوا یا سی شارپ برای اندروید بار مصرف یا کلاس ناشناس مانند جاوا صرف نظر کنید – در عوض، می توانید منطق تجاری کد روش خود را به صورت درون خطی بنویسید. همچنین، از آنجایی که لامبداها به متغیرهای متد اطراف دسترسی دارند، لازم نیست یک لیست پارامتر طولانی ایجاد کنید تا حالت را به کد متد خود منتقل کنید.در C #، عبارات لامبدا با عملگر => همانطور که در اینجا نشان داده شده است ایجاد می شود.
در این مثال، کد عبارت لامبدا (کد درون پرانتزهای فرفری) تعداد کلیک ها را افزایش می دهد و متن دکمه جاوا یا سی شارپ برای اندروید را برای نمایش تعداد کلیک به روز می کند. این عبارت لامبدا با شی دکمه بهعنوان کنترلکننده رویداد کلیک ثبت میشود تا هر زمان که روی دکمه ضربه زده شود، فراخوانی میشود. (در زیر با جزئیات بیشتر توضیح داده شده است.) در این مثال ساده، پارامترهای فرستنده و args توسط کد عبارت lambda استفاده نمی شوند، اما در عبارت lambda برای برآوردن الزامات امضای متد برای ثبت رویداد مورد نیاز هستند.
در زیر هود، کامپایلر C# عبارت لامبدا را به روشی ناشناس ترجمه می کند که هر زمان که رویدادهای کلیک جاوا یا سی شارپ برای اندروید روی دکمه اتفاق می افتد فراخوانی می شود.برای اطلاعات بیشتر در مورد C # و عبارات لامبدا، به مبحث عبارات لامبدا مراجعه کنید.رسیدگی به رویداد یک رویداد راهی برای یک شی برای اطلاع مشترکین ثبت شده در زمانی که اتفاق جالبی برای آن شیء می افتد است. بر خلاف جاوا، که در آن مشترک معمولاً یک رابط Listener را پیادهسازی میکند که حاوی یک متد برگشت تماس است.
C# برای مدیریت رویداد از طریق نمایندگان پشتیبانی در سطح زبان ارائه میکند. یک نماینده مانند یک جاوا یا سی شارپ برای اندروید اشاره گر تابع نوع ایمن شی گرا است – یک مرجع شی و یک نشانه متد را کپسوله می کند. اگر یک شی مشتری بخواهد در یک رویداد مشترک شود، یک نماینده ایجاد می کند و نماینده را به شی اعلان می دهد. هنگامی که رویداد رخ می دهد، شی اعلان کننده متدی را که توسط شی delegate نشان داده شده است، فراخوانی می کند و شی مشتری مشترک را از رویداد مطلع می کند.