Introduction to ASP.NET Web Programming Using the Razor Syntax

صفحه بسیار عالی جهت کار کردن با Razor در زبان C#

Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)

فرق متد های virtual  و  abstract

یک متد abstract می تواند هیچ بدنه ای نداشته باشد. در واقع شما می گوئید، هر کلاس فرزندی خودش الزاماً باید پیاده سازی این متد را تعریف کند. یک متد virtual می گوید، نگاه کن، این پیاده سازی است که ممکن است در کلاس های فرزند بدرد بخورد و امکان هم دارد که بدرد نخورد، پس اگر بدرد می خورد از آن استفاده کنید و اگر بدرد نمی خورد خودت آنرا پیاده سازی کن. (لینک مرجع)

•    فقط متد abstract را در کلاس abstract می توان تعریف کرد.
•    متد abstract دقیقاً مثل interface است.
•    متد abstract پیاده سازی ندارد.

کی کدام؟
وقتیکه می دانیم کلاس هایی که می خواهند از کلاس پدر مشتق شوند همگی دارای متد هایی هستند که پیاده سازی آنها معلوم نیست از متد abstract استفاده می کنیم. اما اگر می دانیم که کلاس های مشتق می شوند اغلب یک پیاده سازی پیش فرض از متد را دارا هستند آنوقت آنها را بصورت virtual تعریف می نماییم.

فرق try-catch و try-finally

فرق این دو این است که در try-catch اشتباهی که اتفاق افتاده (exception) قورت داده می شود. ولی در try-finally بلاک کد finally اجرا می شود و اشتباه اتفاق افتاده راه خود را طی می کند تا توسط یک handler گرفته شود . مرجع

به گفته msdn "مورد استفاده از finally برای از بین بردن منابعی که در بلاک try ساخته شده بدون در نظر گرفتن خطا می باشد."

فرق const و readonly

Const
•    Const نمی تواند static تعریف گردد. (بطور ضمنی static می باشد. می توان ClassName.ConstantName آنها را فراخوانی کرد.)
•    مقدار آنها در زمان کامپایل در کد IL ذخیره می گردد.(با تغییر مقادیر آنها لازم به کامپایل مجدد می باشد. در واقع در زمان کامپایل مثل find و replace کردن هرجا ثابت const باشد بجای آن مقدارش قرار می گیرد)

•    Const را تنها در قسمت declaration می توان مقدار دهی کرد.

Readonly
•    می توانند هم static و هم غیر استاتیک (instance level) تعریف شوند.
•    مقدار دهی آنها در run time انجام می شود.
•    می توانند در قسمت declaration و هم در قسمت سازنده constructor مقدار دهی شوند.

برای مطالعه بیشتر می توان به اینجا و اینجا مراجعه کرد.


انواع path ها در ASP.NET

برگرفته از مقاله Types of ASP.NET paths

نوشته Nathanael Jones

همانطور که از عنوان این مقاله پیداست، می خواهیم انواع مسیرها در ASP.Net را معرفی و مکان استفاده آنها را مشخص کنیم. متاسفانه در تکنولوژی Asp.net انواع مختلفی از آدرس دهی و ارجاع وجود دارد که بعضاً این تنوع باعث سردرگم شدن برنامه نویسان می گردد.

این مقاله، جزییات هر یک از انواع path را بررسی نمی نماید و هدف معرفی مختصر هر یک است، که امیدوارم مورد پسند و مورد ارجاع دوستان قرار بگیرد.

انواع مسيرها در ASP.NET

Asp.net در وهله اول با virtual path  ارتباط دارد، قسمتي از مسير که بعد از نام هاست و شماره پورت مي آيد. زمانيکه با  Asp.net کار مي کنيد، بايد با انواع مختلف URI هايي که در زير بيان مي شود آشنا باشيد، و اينکه چگونه اين مسيرها توسط Asp.net بکار گرفته مي شوند:


•    Absolute paths : براي مثال

http://mycomputer/Web1/Test/images/companylogo.png

* Asp.net با اين نوع مسيرها کاري ندارد، اين مسيرها کمترين ابهام را دارند. Browser ها هم کمترين مشکل را براي فهميدن اين آدرسها دارند.
* از اين نوع آدرس دهي فقط براي ارجاع به سايتهاي خارجي استفاده کنيد. هزينه نگهداري آنها بالاست.

•    Root-Relative virtual paths  : براي مثال

/Web1/Test/images/companylogo.png

* Asp.net با اين گونه مسيرها هم کاري ندارد. Browser ها هم فقط به ابتداي اين گونه مسيرها نام دامنه سند موجود را اضافه مي نمايند.
* من به هيچ عنوان پيشنهاد نمي کنم از اينگونه آدرس ها در کد برنامه استفاده کنيد- به جای آنها مي توانيد از مسيرهاي application-relative يا relative ها استفاده نماييد.
 نکته: اصطلاحاً به اين مسيرها absolute virtual path و domain-relative path هم گفته ميشود.

Application-relative paths : براي مثال

~/images/companylogo.png

* Browser ها که از کاراکتر tilde يعني همان ~ سر در نمي آورند، پس احتياج به يک عمليات ترجمه سمت سرور مي باشد. سمت سرور هم علامت ~ معني HttpRuntime.AppDomainAppVirtualPath مي دهد.
* Asp.net هم اين گونه مسيرها را در ويژگيهاي برخي کنترلها client-relative مي داند، اما شما بايد يادتان باشد که runat=”server”  بگذاريد.
* اين مسيرها جايي بدرد مي خورند که relative paths ها کارايي نداشته باشند.

Relative paths : براي مثال

../images/logo.png

* دو نوع relative paths وجود دارد: server side و client side . اينها از نظر املايي فرقي ندارند، اما server side ها با فايل هاي در برگيرنده شان سمت سرور مرتبط هستند، و client side ها به آدرس بار يا parent markup file ها مرتبط اند.
* Server-side relative paths ها به مسير .master, .ascx,  يا محل .aspx ها مرتبط اند. اينها بايد تغيير پايه بدهند به client side relative path وقتيکه متد ResolveClientUrl() فراخواني مي شود. بيشتر کنترل هاي Asp.net اتوماتيک اين کار را براي شما انجام مي دهند. از اين گونه مسيرها زماني بايد استفاده شود که مي خواهيم به يک فايلي که نسبت به فايل فعلي تغيير مکان ندارد آدرس دهيم.
* Client side relative path ها به URL معمولاً آدرس بار وابسته اند. اگر بخواهيم به يک تصوير در صفحه html ارجاع دهيم ، بايد به مسيري آدرس دهيم که به جايي که در آدرس بار آن صفحه نوشته شده ربط داشته باشد. اگر بخواهيم از يک فايل css به چيزي ارجاع دهيم آدرس دهي بايد به جايي که فايل css در آن قرار گرفته مرتبط باشد. مسيرهايي که درفايل هاي جاوااسکريپت بکار مي روند به جايي که فايل جاوا اسکريپت در آن قرار گرفته ربط ندارند. در واقع بايد به سندي که جاوااسکريپت در آن بکار رفته مرتبط باشند.

Fragment and javascript path : براي مثال

#section2 يا javascript:OpenPopup();

* Asp.net با اينگونه آدرس ها کاري ندارد. Browser ها هم وقتيکه يکي از اين آدرس ها کليک شود انتظار نمي رود که درخواستي را صادر کنند. و فقط در همان سند به قسمت خاصي مي روند.
* Fragment هرگز در درخواست هاي Http ديده نمي شود. اينها فقط به درد مرورگرها مي خورند. و قبل از اينکه چيزي به asp.net ارسال شود اينها حذف مي گردند.