<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>وبلاگ آسیا آی تی &#187; برنامه نویسی</title>
	<atom:link href="http://blog.asiait.ir/category/%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.asiait.ir</link>
	<description> آی تی &#124; معرفی سایت ها &#124; نقد برسی &#124; آموزش  &#124; دانلود</description>
	<lastBuildDate>Sun, 18 Sep 2016 07:04:56 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://asiait.ir/?v=4.1</generator>
	<item>
		<title>چگونگی ساخت فن پیج فیسبوک</title>
		<link>http://blog.asiait.ir/%da%86%da%af%d9%88%d9%86%da%af%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa-%d9%81%d9%86-%d9%be%db%8c%d8%ac-%d9%81%db%8c%d8%b3%d8%a8%d9%88%da%a9/</link>
		<comments>http://blog.asiait.ir/%da%86%da%af%d9%88%d9%86%da%af%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa-%d9%81%d9%86-%d9%be%db%8c%d8%ac-%d9%81%db%8c%d8%b3%d8%a8%d9%88%da%a9/#comments</comments>
		<pubDate>Sun, 03 Jan 2016 09:08:17 +0000</pubDate>
		<dc:creator><![CDATA[Mahtab Kh]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[وب]]></category>
		<category><![CDATA[آموزش ساخت fan page]]></category>
		<category><![CDATA[آموزش ساخت فن پیج]]></category>
		<category><![CDATA[ساخت fan page]]></category>
		<category><![CDATA[ساخت fan page فیسبوک]]></category>
		<category><![CDATA[ساخت فن پیج فیسبوک]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1321</guid>
		<description><![CDATA[آموزش به ترتیب و کامل: ۱.ابتدا وارد اکانت خودشوید بعد از ورود به اکانت خود شما آماده ساخت یک صفحه برای کارهای شخصی تجاری یا … یا همان fan page می باشید ۲.دنبال آیکونی باشید که نشان دهنده ساخت صفحه یا create page l می باشد البته شما می توانید از آدرس زیر نیز استفاده ...]]></description>
				<content:encoded><![CDATA[<div class="full md-text">
<p style="text-align: justify">آموزش به ترتیب و کامل:</p>
<p style="text-align: justify">۱.ابتدا وارد اکانت خودشوید بعد از ورود به اکانت خود شما آماده ساخت یک <a title="طراحی سایت" href="http://asiait.ir" target="_blank">صفحه</a> برای کارهای شخصی تجاری یا … یا همان fan page می باشید</p>
<p style="text-align: justify">۲.دنبال آیکونی باشید که نشان دهنده ساخت صفحه یا create page l می باشد البته شما می توانید از آدرس زیر نیز استفاده کنید</p>
<p>http://www.facebook.com/pages/create.php</p>
<p>۳.بعد از اینکه وارد صفجه شدید بسته به علاقه خود یک عنوان برای صفجه خود انتخاب کرده و دکمه ساخت یا create رو کلیک کنید تا به مرحله بعدی برسید</p>
<p style="text-align: justify">۴.بعد از <a title="طراحی سایت" href="http://asiait.ir" target="_blank">ساخت صفحه</a> حالا نوبت به خوشگل کردن اون میرسه ازجمله اضافه کردن عکس توضییحات اضافی و ….<br />
۵.خوب حالا نوبت به اضافه کردن این لینک به صفحه اصلی برای بازدید دیگران و در نهایت بالا رفتن آمار صفحه می شه که خوب در این صورت دکمه زیر رو فشار دهید<br />
Promote this Page on your <a title="طراحی سایت" href="http://asiait.ir" target="_blank">website</a></p>
<p style="text-align: justify">موفق  باشید.</p>
</div>
<aside class="meta action">
<div class="items" style="text-align: justify"></div>
</aside>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%da%86%da%af%d9%88%d9%86%da%af%db%8c-%d8%b3%d8%a7%d8%ae%d8%aa-%d9%81%d9%86-%d9%be%db%8c%d8%ac-%d9%81%db%8c%d8%b3%d8%a8%d9%88%da%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>تنظیم بخش های مختلف در css</title>
		<link>http://blog.asiait.ir/%d8%aa%d9%86%d8%b8%db%8c%d9%85-%d8%a8%d8%ae%d8%b4-%d9%87%d8%a7%db%8c-%d9%85%d8%ae%d8%aa%d9%84%d9%81-%d8%af%d8%b1-css/</link>
		<comments>http://blog.asiait.ir/%d8%aa%d9%86%d8%b8%db%8c%d9%85-%d8%a8%d8%ae%d8%b4-%d9%87%d8%a7%db%8c-%d9%85%d8%ae%d8%aa%d9%84%d9%81-%d8%af%d8%b1-css/#comments</comments>
		<pubDate>Thu, 19 Nov 2015 10:30:29 +0000</pubDate>
		<dc:creator><![CDATA[وحید دولتی]]></dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[آموزش طراحی سایت]]></category>
		<category><![CDATA[افزایش بازدید]]></category>
		<category><![CDATA[بلاگ آسیا آی تی]]></category>
		<category><![CDATA[بلاگ آی تی]]></category>
		<category><![CDATA[تجارت الکترونیک]]></category>
		<category><![CDATA[سایت]]></category>
		<category><![CDATA[طراحی سایت]]></category>
		<category><![CDATA[طراحی وب سایت]]></category>
		<category><![CDATA[مقالات طراحی سایت]]></category>
		<category><![CDATA[وبلاگ آسیا آی تی]]></category>
		<category><![CDATA[وبلاگ آی تی]]></category>
		<category><![CDATA[گوگل]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1305</guid>
		<description><![CDATA[تنظیم ابعاد در CSS برای تنظیم ابعاد عناصر در CSS  از چند ویژگی میتوان استفاده کرد که مهمترین و اصلی ترین آنها Width و Height میباشد. در ذیل به توضیح این ویژگی ها با توجه به ورژن تعریف شده در CSS میپردازیم. height :  این ویژگی در تمام مرورگر ها پشتیبانی میشود.  p.ex { height:100px; ...]]></description>
				<content:encoded><![CDATA[<div class="CenterLarge">
<div>
<article>
<p style="text-align: justify"><strong>تنظیم ابعاد در CSS</strong></p>
<p style="text-align: justify">برای<a title="تنظیم طول و عرض ( Height , Width ) عناصر در CSS" href="http://blog.asiait.ir" target="_blank"> تنظیم ابعاد عناصر در CSS</a>  از چند ویژگی میتوان استفاده کرد که مهمترین و اصلی ترین آنها Width و Height میباشد.</p>
<p style="text-align: justify">در ذیل به توضیح این ویژگی ها با توجه به ورژن تعریف شده در CSS میپردازیم.</p>
<p style="text-align: justify"><strong>height :</strong>  این ویژگی در تمام مرورگر ها پشتیبانی میشود.</p>
<blockquote>
<blockquote>
<p style="text-align: right"> p.ex</p>
<p style="text-align: right">{<br />
height:100px;</p>
<p>}</p></blockquote>
</blockquote>
<p style="text-align: justify">با دو ویژگی max-height و max-width شما میتوانید حداکثر مقدار را برای یک عنصر تنظیم کنید.</p>
<p style="text-align: justify"><strong>max-height :</strong>  این ویژگی در تمام مرورگر ها پشتیبانی میشود. به استثتا IE6 و ورژن های پایین تر</p>
<blockquote><p> p</p>
<p>{<br />
max-height:50px;<br />
}</p></blockquote>
<p style="text-align: justify"><strong>max-width :</strong> این ویژگی در تمام مرورگر ها پشتیبانی میشود. به استثتا IE6 و ورژن های پایین تر</p>
<blockquote>
<p style="text-align: justify"> p</p>
<p style="text-align: justify">{<br />
max-width:100px;<br />
}</p>
<p style="text-align: justify"><strong>Background</strong></p>
<p style="text-align: justify">در این بخش از <a href="http://blog.asiait.ir" target="_blank">آموزش css </a>به توضیح ویژگی <a title="تنظیم پس زمینه Background عناصر در CSS" href="http://blog.asiait.ir" target="_blank">Background</a> میپردازیم. ویژگی <a title="تنظیم پس زمینه Background عناصر در CSS" href="http://blog.asiait.ir" target="_blank">Background</a> برای تعریف افکت های  پس زمینه برای یک عنصر به کار میرود.این ویژگی در<a title=" طراحی وب سایت" href="http://blog.asiait.ir" target="_blank"> طراحی وب سایت</a> به شکیل تر شدن سایت شما کمک میکند.</p>
<p style="text-align: justify">انواع مختلفی از این ویژگی وجود دارد که به شرح هر یک از آنها میپردازیم</p>
<ol style="text-align: justify">
<li>background-color</li>
<li>background-image</li>
<li>background-repeat</li>
<li>background-attachment</li>
<li>background-position</li>
</ol>
<div class="CenterLarge">
<div>
<article>
<p style="text-align: justify"><strong>Font Family</strong></p>
<p style="text-align: justify">در این بخش از <a title="آموزش css" href="http://blog.asiait.ir" target="_blank">آموزش css</a> ، <a title="تنظیم قلم و فونت" href="http://blog.asiait.ir" target="_blank">تنظیم قلم و فونت</a> را آموزش میدهیم.</p>
<p style="text-align: justify">در<a title=" آموزش css" href="http://blog.asiait.ir" target="_blank"> css</a> دو نوع از خانواده فونت ها وجود دارد.</p>
<ul style="text-align: justify">
<li>&#8220;generic family&#8221; مثل  &#8220;Serif&#8221; یا &#8220;Monospace&#8221;</li>
<li>&#8220;font family&#8221; مثل &#8220;Times New Roman&#8221; یا &#8220;Arial&#8221;</li>
</ul>
<p style="text-align: justify">با ویژگی <a title="تنظیم قلم و فونت CSS Styling Font" href="http://blog.asiait.ir" target="_blank">font-family</a> شما میتوانید نوع قلم مورد نظر را برای متن تنظیم کنید،چنانچه میخواهید از یک فونت خاص استفاده کنید ، نوع فونت مورد نظر خود را اول بنویسید ، چون ممکن است این فونت در کامپیوتر های دیگر موجود نباشد و باعث بهم ریختگی نظم خطوط شود میتوانید نام چند فونت دیگر را نیز وارد کنید.</p>
<p style="text-align: justify"><strong>Font Style</strong><br />
با این ویژگی شما نوع نمایش متن را مشخص میکنید.این ویژگی دارای دو مقدار زیر میباشد :</p>
<ol style="text-align: justify">
<li> normal   :متن به صورت معمولی نمایش داده میشود</li>
<li> italic   : متن به صورات ایتالیک نمایش داده میشود</li>
<li> oblique  :  متن به صورت مورب نمایش داده میشود</li>
</ol>
<p style="text-align: justify"><strong>Font Size</strong><br />
این ویژگی سایز متن را مشخص میکند. اندازه متن در <a title="طراحی وب سایت" href="http://blog.asiait.ir" target="_blank">طراحی وب سایت</a> بسیار حائز اهمیت است. ویژگی <a title="فونت" href="http://blog.asiait.ir" target="_blank">font-size</a> را میتوانید به صورت مطلق یا نسبی مقداردهی کنید . اگرچه در زوم و رزولیشن های مختلف این مقدار تغییر میکند.ولی این تغییر اندازه برای کل صفحه میباشد وشامل یک بخش نیست. سایز پیش فرض برای یک متنن نرمال 16px تعریف میشود.<br />
برای متن هایی که در بالای صفحه (header) نمایش داده میشوند از تگ های<a title="تگ عناوين H1 - H6" href="http://blog.asiait.ir" target="_blank"> &lt;h1&gt; &#8211; &lt;h6&gt;</a> و <a title="تگ &lt;p&gt;" href="http://blog.asiait.ir" target="_blank">تگ &lt;p&gt; </a>برای پاراگراف های خود استفاده کنید، در مورد این تگ ها در قسمت <a title="آموزش HTML" href="http://blog.asiait.ir" target="_blank">آموزش HTML</a> میتوانید بیشتر اطلاعات کسب کنید</p>
<div class="CenterLarge">
<div>
<article><strong>لیست UL و LI در سی اس اس</strong>در این بخش از <a title="آموزش css" href="http://blog.asiait.ir" target="_blank">آموزش css</a> ، <a title="CSS Styling List" href="http://blog.asiait.ir" target="_blank">تنظیم لیست ها</a> را آموزش میدهیم.ویژگی هایی که برای یک لیست در <a title="آموزش css" href="http://blog.asiait.ir" target="_blank">css </a>وجود دارد به ما این امکان را میدهد که <a title="تنظیم لیست ها CSS Styling List" href="http://blog.asiait.ir" target="_blank"> List</a> را در 3 حالت زیر نمایش دهیم.</p>
<ul>
<li>تنظیم لیست یه صورت مرتب</li>
<li>تنظیم لیست به صورت نامرتب</li>
<li>تنظیم تصویر برای نشانگر لیست</li>
</ul>
<p>در <a title="آموزش HTML" href="http://blog.asiait.ir" target="_blank">HTML</a>  دو نوع ار انواع لیست وجود دارد</p>
<ul>
<li>unordered lists     آیتم های لیست با یک نشانگرد گرد شکل مشکی ، نمایش داده میشوند</li>
<li>ordered lists     آیتم های لیست با اعداد یا حروف ، نشانه گذاری میشوند.</li>
</ul>
<p><a title="آموزش css" href="http://blog.asiait.ir" target="_blank">Css  </a>این انعطاف پپذیری را به شما میدهد که نشانگر آیتم های لیست خود را به یک تصویر مدل دهید،که برای زیبایی طراحی سایت شما موثر میباشد.</p>
</article>
</div>
</div>
</article>
</div>
</div>
</blockquote>
</article>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%aa%d9%86%d8%b8%db%8c%d9%85-%d8%a8%d8%ae%d8%b4-%d9%87%d8%a7%db%8c-%d9%85%d8%ae%d8%aa%d9%84%d9%81-%d8%af%d8%b1-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>مزایای Css</title>
		<link>http://blog.asiait.ir/%d9%85%d8%b2%d8%a7%db%8c%d8%a7%db%8c-css/</link>
		<comments>http://blog.asiait.ir/%d9%85%d8%b2%d8%a7%db%8c%d8%a7%db%8c-css/#comments</comments>
		<pubDate>Thu, 19 Nov 2015 09:47:28 +0000</pubDate>
		<dc:creator><![CDATA[وحید دولتی]]></dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[آموزش طراحی سایت]]></category>
		<category><![CDATA[بلاگ آسیا آی تی]]></category>
		<category><![CDATA[سایت]]></category>
		<category><![CDATA[سایت تجارت الکترونیک]]></category>
		<category><![CDATA[طراحی سایت]]></category>
		<category><![CDATA[طراحی وب سایت]]></category>
		<category><![CDATA[مقالات طراحی سایت]]></category>
		<category><![CDATA[وبلاگ آسیا آی تی]]></category>
		<category><![CDATA[گوگل]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1300</guid>
		<description><![CDATA[مزایای Css با اینکه در سال‌های نخست پیدایش طراحی وب، طراح‌ها از جدول‌ها و ترفند پنهان سازی آنها برای چیدمان کمک می‌گرفتند، روش مدرن طراحی وب، این روند را منسوخ کرده است. چیدمان اکنون، تنها با دیواره (یا DIV)، که برتری‌های فراوانی نسبت به جدول‌ها (یا TABLE) دارند، انجام می‌شود. هر دیواره، یک موزاییک مجازی ...]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify">مزایای Css</h1>
<p style="text-align: justify">با اینکه در سال‌های نخست پیدایش طراحی وب، طراح‌ها از جدول‌ها و ترفند پنهان سازی آنها برای چیدمان کمک می‌گرفتند، روش مدرن طراحی وب، این روند را منسوخ کرده است. چیدمان اکنون، تنها با دیواره (یا DIV)، که برتری‌های فراوانی نسبت به جدول‌ها (یا TABLE) دارند، انجام می‌شود. هر دیواره، یک موزاییک مجازی بخش کننده صفحه‌است که کار چیدمان را آسان‌تر انجام می‌دهد. جدول‌ها به جایگاه نمایش داده‌های ستونی خود بازگشتند و دیگر از آنها برای چیدن داده‌های صفحه‌های وب استفاده نمی‌شود. الگوهای آبشاری، افزون بر سبک تر کردن هر صفحه وب و پاک‌تر کردن آن، از داده‌های تصویری و نمایشی استاندارد، روش طراحی وب را به میزان فراوانی آسان تر و دسترسایی و کارایی وب را بهتر کرده‌اند.</p>
<p style="text-align: justify"><strong>به کمک <a href="http://blog.asiait.ir" target="_blank">CSS </a>میتونیم از دوباره نویسی كدهای HTML که باعث مشکل شدن کدنویسی و همچنین كند شدن سرعت بارگذاری صفحه در اینترنت میشه جلوگیری كنیم.</strong></p>
<p style="text-align: justify">برای مثال می تونیم یك بار نوع فونت مورد استفاده در یك صفحه را تعیین كنیم و دیگر مجبور نباشیم كد مربوط به فونت را در صفحه به كارببریم.<br />
در واقع بطور کلی میشه گفت CSS این امکان رو ایجاد میکنه تا طراح بتونه چندین مشخصه توی طراحی صفحه رو به یکباره تعیین کنه و همچنین میشه گفت برای کنترل دقیق مشخصات صفحه و استاندارد کردن تگ های غیراستاندارد HTML و طراحی Layout صفحه میتونیم CSS رو بکار ببریم.</p>
<p><strong><a href="http://blog.asiait.ir" target="_blank">مزایای CSS</a> بصورت خلاصه</strong> : (در مورد هرکدوم از این مزایا میشه مفصل صحبت کرد و مفهوم اونا رو در عمل باید دید)</p>
<ul style="text-align: justify">
<li style="text-align: justify">CSS در وقت صرفه جویی میکنه (همونطور که گفتم با تعیین یکباره مشخصات)</li>
<li style="text-align: justify">تغیییرات مجدد تگ های HTML بسیار راحت میشه.</li>
<li style="text-align: justify">طراحی صفحه بدون نیاز به تگ های قالب بندی HTML</li>
<li style="text-align: justify">طراحی صفحات دینامیک به کمک javascript</li>
<li style="text-align: justify">و &#8230;</li>
</ul>
<ul style="text-align: justify">
<li><strong>قوانین نام گذاری <a href="http://blog.asiait.ir" target="_blank">فایل های </a></strong><a href="http://blog.asiait.ir" target="_blank"><strong>css</strong></a></li>
</ul>
<ol style="text-align: justify">
<li>از کاراکترهای خاص استفاده نکنید.کاراکترهای مجاز عبارتند از :حروف a-z ، اعداد 0-9 ، خط زیر (_) ، خط فاصله (-)</li>
<li>از کاراکتر فضای خالی استفاده نکنید ( ) مثلا : style Master.css  ، این نامگذاری میتواند در وب سرور شما مشکل ایجاد کند.</li>
<li>نام فایل بایستی با یک حرف شروع شود.</li>
<li>برای نام گذاری فایل از حروف کوچک استفاده کنید.</li>
<li>نام فایل را تا آنجا که ممکن است کوتاه تعریف نمایید.</li>
<li>فراموش نکنید که حتما فایل را با پسوند css ذخیره کنید.</li>
</ol>
<p style="text-align: justify">با رعایت تمامی این نکات شما <a title="طراحی سایت" href="http://blog.asiait.ir" target="_blank">طراحی سایت</a> بهینه تری را خواهید داشت .</p>
<div class="CenterLarge">
<div>
<article><a href="http://blog.asiait.ir" target="_blank"><strong>CSS خارجی</strong></a>یکی از روشهای<a href="http://blog.asiait.ir" target="_blank"> تعریف css</a> استفاده از روش External Style Sheet میباشد.<strong>برای داشتن <a title="طراحی سایت" href="http://blog.asiait.ir" target="_blank">طراحی سایت</a> بهینه پیشنهاد میشود که از این روش استفاده کنید.</strong></p>
<p>از <a title="آموزش css" href="http://blog.asiait.ir" target="_blank">CSS</a> خارجی زمانی استفاده میشود که آن style در بیشتر صفحات استفاده شده باشد.<br />
با استفاده از <a title="css خارجی" href="http://blog.asiait.ir" target="_blank">CSS خارجی</a> ، شما با تغییر دادن تنهایک فایل میتوانید ظاهر سایت خود را تغییر دهید.هر صفحه بایستی به <a href="http://blog.asiait.ir" target="_blank">CSS</a> Style مورد نظر خود لینک داده شود. بهترین روش برای گذاشتن CSS Style در صفحات وب ، <a title="طریقه نوشتن CSS - فایل خارجی در پروژه" href="http://blog.asiait.ir" target="_blank">CSS خارجی</a> میباشد<br />
با استفاده از تگ &lt;link&gt; در داخل بخش head شما میتوانید یک <a title="css خارجی" href="http://blog.asiait.ir" target="_blank">CSS خارجی</a> تعریف کنید.<br />
مثال :</p>
<p style="text-align: left">&lt;head&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;mystyle.css&#8221;&gt;<br />
&lt;/head&gt;</p>
</article>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d9%85%d8%b2%d8%a7%db%8c%d8%a7%db%8c-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>نکات پایه ای &#8211; اطلاعات مفید در html</title>
		<link>http://blog.asiait.ir/%d9%86%da%a9%d8%a7%d8%aa-%d9%be%d8%a7%db%8c%d9%87-%d8%a7%db%8c-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%85%d9%81%db%8c%d8%af-%d8%af%d8%b1-html/</link>
		<comments>http://blog.asiait.ir/%d9%86%da%a9%d8%a7%d8%aa-%d9%be%d8%a7%db%8c%d9%87-%d8%a7%db%8c-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%85%d9%81%db%8c%d8%af-%d8%af%d8%b1-html/#comments</comments>
		<pubDate>Thu, 19 Nov 2015 08:17:06 +0000</pubDate>
		<dc:creator><![CDATA[وحید دولتی]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[آموزش طراحی سایت]]></category>
		<category><![CDATA[افزایش بازدید]]></category>
		<category><![CDATA[بلاگ آسیا آی تی]]></category>
		<category><![CDATA[طراحی سایت]]></category>
		<category><![CDATA[وب سایت]]></category>
		<category><![CDATA[وبلاگ آسیا آی تی]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1295</guid>
		<description><![CDATA[نکات پایه ای &#8211; اطلاعات مفید هنگامی که شما یک متن HTML می نویسید هرگز نمی توانید مطمئن باشید این متن  در یک مرورگر دیگر چطور نشان داده می شود.تعدادی از مردم صفحه نمایش بزرگ کامپیوتر دارند و تعدادی کوچک. هر بار که کاربر اندازه پنجره را تغییر دهد متن دوباره قالب بندی خواهد شد. ...]]></description>
				<content:encoded><![CDATA[<h3>نکات پایه ای &#8211; اطلاعات مفید</h3>
<p style="text-align: justify">هنگامی که شما یک متن HTML می نویسید هرگز نمی توانید مطمئن باشید این متن  در یک مرورگر دیگر چطور نشان داده می شود.تعدادی از مردم صفحه نمایش بزرگ کامپیوتر دارند و تعدادی کوچک. هر بار که کاربر اندازه پنجره را تغییر دهد متن دوباره قالب بندی خواهد شد. هرگز سعی نکنید که با اضافه کردن خطوط خالی و فاصله در متن آن را در ویرایشگرتان قالب بندی کنید.<br />
HTML فاصله ها را از متن حذف می کند، هر تعدادی از فاصله ها تنها  به یک فاصله  تبدیل می شوند.</p>
<h3>نکات پایه ای &#8211; اطلاعات مفید</h3>
<p style="text-align: justify">همیشه یک علامت &#8220;/&#8221; به منابع زیر پوشه ها اضافه کنید. اگر شما پیوندی مثل این درست کنید</p>
<p dir="ltr" align="left">href=&#8221;http://www.html.ir/links.html&#8221;</p>
<p style="text-align: justify">شما دو تقاضا برای سرور درست کرده اید ، چون سرور یک علامت &#8220;/&#8221; به انتهای آدرس اضافه کرده و یک تقاضای جدید درست می کند. مثل این:</p>
<p dir="ltr" align="left">href=&#8221;http://www.html.ir/links.html/&#8221;</p>
<p style="text-align: justify">از Anchor نام دار معمولا برای ساخت یک جدول از محتویات در ابتدای یک پرونده بزرگ استفاده می شود. به هر بخش در میان پرونده یک Anchor نام دار داده شده و پیوند به هرکدام از این Anchor ها در بالای پرونده قرار داده شده است. اگر یک مرورگر نتواند Anchor نام داری را که مشخص شده است را پیدا کند به ابتدای آن پرونده رفته و هیچ خطایی اتفاق نمی افتد.</p>
<h3>نکات پایه ای-اطلاعات مفید</h3>
<p style="text-align: justify">اگر یک قاب حاشیه پدیدار داشته باشد کاربر می تواند با کشیدن حاشیه آن ، اندازه آن را تغییر دهد. برای جلوگیری از این عمل کاربر ، شما می توانید &#8220;noresize=&#8221;noresize را به برچسب &lt;frame&gt; اضافه کنید. اگر برچسب &lt;noframes&gt; را اضافه کنیم ، مرورگر قاب را پشتیبانی نمی کند.<br />
مهم:شما نمی توانید برچسب های &lt;body&gt; &lt;/body&gt; و &lt;frame&gt; &lt;/frame&gt; را با هم استفاده کنید. هر چند اگر شما برچسب &lt;noframes&gt; را در مرورگر هایی که قابها را پشتیبانی نمی کنند و حاوی مقداری متن نیز باشد اضافه کنید شما باید متن را بین برچسب های &lt;body&gt; &lt;/body&gt; قرار دهید.</p>
<h3>نکته های پایه ای-اطلاعات مفید</h3>
<p>عناصر &lt;thead&gt;، &lt;tbody&gt;و &lt;tfoot&gt;به دلیل پشتیبانی بد مرورگر ها به ندرت مورد استفاده قرار می گیرند. انتظار می رود که در نسخه های بعدی XHTML این روند تغییر کند.</p>
<h3>نکات پایه ای &#8211; اطلاعات مفید</h3>
<p style="text-align: justify">اگر یک فایل HTML حاوی 10 تصویر باشد ، برای نمایش کامل صفحه به 11 فایل احتیاج است. بارگیری تصاویر وقت گیر است ، بنابر این بهترین توصیه من اینست که از تصاویر به دقت استفاده کنید.</p>
<h3>نکات پایه ای-اطلاعات مفید</h3>
<p style="text-align: justify">bg color, background و موجودیت های متن در برچسب &lt;body&gt; در آخرین نسخه HTML بد دانسته شده است. کنسرسیوم شبکه گسترده جهانی(w3c) این موجودیت ها را از نظریه های خود حذف کرده.<br />
به جای آن از CSS باید استفاده کرد(برای معرفی طرح بندی و نمایش خواص عناصر).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d9%86%da%a9%d8%a7%d8%aa-%d9%be%d8%a7%db%8c%d9%87-%d8%a7%db%8c-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%85%d9%81%db%8c%d8%af-%d8%af%d8%b1-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>یک فایل HTML چیست؟</title>
		<link>http://blog.asiait.ir/%db%8c%da%a9-%d9%81%d8%a7%db%8c%d9%84-html-%da%86%db%8c%d8%b3%d8%aa%d8%9f/</link>
		<comments>http://blog.asiait.ir/%db%8c%da%a9-%d9%81%d8%a7%db%8c%d9%84-html-%da%86%db%8c%d8%b3%d8%aa%d8%9f/#comments</comments>
		<pubDate>Thu, 19 Nov 2015 07:53:34 +0000</pubDate>
		<dc:creator><![CDATA[وحید دولتی]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[آموزش طراحی سایت]]></category>
		<category><![CDATA[بلاگ آسیا آی تی]]></category>
		<category><![CDATA[تجارت الکترونیک]]></category>
		<category><![CDATA[سایت تجارت الکترونیک]]></category>
		<category><![CDATA[طراحی سایت]]></category>
		<category><![CDATA[مقالات طراحی سایت]]></category>
		<category><![CDATA[وبلاگ آسیا آی تی]]></category>
		<category><![CDATA[وبلاگ آی تی]]></category>
		<category><![CDATA[گوگل]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1289</guid>
		<description><![CDATA[یک فایل HTML چیست؟ HTML مخفف زبان نشانه گذاری فرا متنی است (hyper text markup language). یک فایل HTML یک فایل متنی حاوی برچسب های کوچک نشانه گذاریست بر چسب های نشانه گذاری به مرورگرهای وب بیان می کنند که صفحه را چگونه نشان دهد یک فایل HTML باید دارای پسوند htm. یا html. باشد ...]]></description>
				<content:encoded><![CDATA[<h3>یک فایل <a href="http://blog.asiait.ir" target="_blank">HTML </a>چیست؟</h3>
<ul>
<li><a href="http://blog.asiait.ir" target="_blank">HTML </a>مخفف زبان نشانه گذاری فرا متنی است (hyper text markup language).</li>
<li>یک فایل <a href="http://blog.asiait.ir" target="_blank">HTML </a>یک فایل متنی حاوی برچسب های کوچک نشانه گذاریست</li>
<li>بر چسب های نشانه گذاری به مرورگرهای وب بیان می کنند که صفحه را چگونه نشان دهد</li>
<li>یک فایل <a href="http://blog.asiait.ir" target="_blank">HTML </a>باید دارای پسوند htm. یا html. باشد</li>
<li>یک فایل <a href="http://blog.asiait.ir" target="_blank">HTML </a>می تواند توسط یک ویرایشگر متنی ساده ساخته شود</li>
</ul>
<h3>پسوند htm. یا html. ?</h3>
<p style="text-align: justify">هنگامی که شما یک فایل <a href="http://blog.asiait.ir" target="_blank">HTML </a>را ذخیره می کنید شما می توانید هرکدام از پسوندهای htm. یا html. را انتخاب کنید.ما در مثال هایمان از پسوند htm. استفاده می کنیم. این ممکن است یک رفتار بد موروثی از گذشته باشد که بیشتر نرم افزارهایی که استفاده می شوند فقط پسوند سه حرفی را قبول می کنند.با نرم افزار جدیدتر ما فکر می کنیم که اگر از پسوند html. استفاده کنیم بسیار ایمن تر خواهیم بود.</p>
<h3><a href="http://blog.asiait.ir" target="_blank">برچسب های HTML</a></h3>
<ul>
<li>برچسب های <a href="http://blog.asiait.ir" target="_blank">HTML </a>برای نشانه گذاری عناصر <a href="http://blog.asiait.ir" target="_blank">HTML </a>استفاده می شوند</li>
<li>بر چسب های <a href="http://blog.asiait.ir" target="_blank">HTML </a>توسط دو کاراکتر &lt; و &gt; محاط می شوند</li>
<li>این کاراکتر های محاط کننده قلاب نامیده می شوند</li>
<li>بر چسب های <a href="http://blog.asiait.ir" target="_blank">HTML </a>معمولا بصورت جفت می آیند &lt;b&gt; , &lt;b/&gt;</li>
<li>اولین برچسب دوتایی برچسب شروع و دومی برچسب پایانی است</li>
<li>متن های بین برچسب ابتدایی و انتهایی محتوای عناصر هستند</li>
<li>برچسبهای <a href="http://blog.asiait.ir" target="_blank">HTML </a>به حروف کوچک و بزرگ حساس نیستند &lt;b&gt; معادل &lt;B&gt;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%db%8c%da%a9-%d9%81%d8%a7%db%8c%d9%84-html-%da%86%db%8c%d8%b3%d8%aa%d8%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>خصوصیات مهم جاوا اسکریپت</title>
		<link>http://blog.asiait.ir/%d8%ae%d8%b5%d9%88%d8%b5%db%8c%d8%a7%d8%aa-%d9%85%d9%87%d9%85-%d8%ac%d8%a7%d9%88%d8%a7-%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa/</link>
		<comments>http://blog.asiait.ir/%d8%ae%d8%b5%d9%88%d8%b5%db%8c%d8%a7%d8%aa-%d9%85%d9%87%d9%85-%d8%ac%d8%a7%d9%88%d8%a7-%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa/#comments</comments>
		<pubDate>Sat, 16 May 2015 19:39:34 +0000</pubDate>
		<dc:creator><![CDATA[Reza .M]]></dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[جاوااسکریپت]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[جاوا اسکریپت]]></category>
		<category><![CDATA[طراحی سایت]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1056</guid>
		<description><![CDATA[در این قسمت از آموزش جاوا اسکریپت، خصوصیات مهم Java Script را برای شما بیان می کنیم. همانطور که گفته شد جاوا اسکریپت یک زبان آبجکتیو (شی‌گرا) است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده‌است. این زبان در هنگام اجرا مرحله ای به نام کامپایلر را طی نکرده و دستورات آن به صورت خط ...]]></description>
				<content:encoded><![CDATA[<p>در این قسمت از آموزش جاوا اسکریپت، خصوصیات مهم <a title="جاوا اسکریپت" href="http://blog.asiait.ir/%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%DA%86%DB%8C%D8%B3%D8%AA-%D8%9F/" target="_blank">Java Script</a> را برای شما بیان می کنیم. همانطور که گفته شد جاوا اسکریپت یک زبان آبجکتیو (شی‌گرا) است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده‌است. این زبان در هنگام اجرا مرحله ای به نام کامپایلر را طی نکرده و دستورات آن به صورت خط به خط اجرا می شود. برنامه های نوشته شده به زبان های برنامه نویسی مثل VB , C یا #C در هنگام اجرا ابتدا توسط کامپایلر به طور کامل خوانده شده و دیباگ می شوند و در صورت عدم وجود اشکال، اجرا خواهند می شوند. اما برنامه های نوشته شده به زبان های اسکریپتی، به صورت خط به خط توسط مرورگر خوانده شده و اجرا می شوند .</p>
<p><a href="http://blog.asiait.ir/asa-content/uploads/2015/05/javascript_logo.png"><img class="alignnone size-medium asa-image-1057" src="http://blog.asiait.ir/asa-content/uploads/2015/05/javascript_logo-300x300.png" alt="javascript_logo" width="300" height="300" /></a></p>
<p>جاوا اسکریپت به عنوان یک زبان برنامه نویسی ساده و پرکاربرد به برنامه نویسان در <a title="آسیا آی تی" href="http://asiait.ir/" target="_blank"><strong>طراحی سایت</strong></a> آزادی عمل می دهد. این زبان به رویدادهای مختلف در صفحه واکنش نشان می دهد به عبارتی می توان یک تابع جاوا اسکریپت را تعریف کرده و با یک کلیک آن را اجرا کرد.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%ae%d8%b5%d9%88%d8%b5%db%8c%d8%a7%d8%aa-%d9%85%d9%87%d9%85-%d8%ac%d8%a7%d9%88%d8%a7-%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>طراحی سایت به سبک HTML6</title>
		<link>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d9%87-%d8%b3%d8%a8%da%a9-html6/</link>
		<comments>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d9%87-%d8%b3%d8%a8%da%a9-html6/#comments</comments>
		<pubDate>Fri, 15 May 2015 18:48:38 +0000</pubDate>
		<dc:creator><![CDATA[Reza .M]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTML6]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[برچسب]]></category>
		<category><![CDATA[بهینه سازی سایت]]></category>
		<category><![CDATA[سئو]]></category>
		<category><![CDATA[طراحی سایت]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1049</guid>
		<description><![CDATA[طراحی سایت به سبک HTML6 با توجه به نتایج خارق العاده از انتشار نسخه های مختلف زبان HTML که از جمله زبان های ساده در زمینه طراحی سایت و توسعه وب است، در نسخه جدید خود یعنی HTML6 هم  مجموعه ی فوق العاده ای برای فعالان عرصه طراحی سایت و توسعه دهندگان به ارمغان آورده ...]]></description>
				<content:encoded><![CDATA[<p><a title="آسیا آی تی" href="http://asiait.ir" target="_blank"><strong>طراحی سایت</strong></a> به سبک HTML6</p>
<p>با توجه به نتایج خارق العاده از انتشار نسخه های مختلف زبان HTML که از جمله زبان های ساده در زمینه <a title="آسیا آی تی" href="http://asiait.ir/" target="_blank">طراحی سایت</a> و توسعه وب است، در نسخه جدید خود یعنی HTML6 هم  مجموعه ی فوق العاده ای برای فعالان عرصه <a title="آسیا آی تی" href="http://asiait.ir/" target="_blank">طراحی سایت</a> و توسعه دهندگان به ارمغان آورده است. اکنون نگاهی به دو نسخه 5 و 6 HTML خواهیم انداخت.</p>
<p><a href="http://blog.asiait.ir/asa-content/uploads/2015/05/introduction-to-html6.jpg"><img class="alignnone size-medium asa-image-1050" src="http://blog.asiait.ir/asa-content/uploads/2015/05/introduction-to-html6-300x219.jpg" alt="introduction-to-html6" width="300" height="219" /></a></p>
<p>مفهوم HTML5:</p>
<p>در این نسخه امکان مدیریت برنامه های وب با دقت و نظم بالایی وجود دارد و این قابلیت با  ابزارهای &lt;header&gt;, &lt;menu&gt;,&lt;nav&gt; , &lt;menuitem&gt; و &#8230; . بوجود آمده است.</p>
<p>توسعه­ دهندگان می­توانند برخی از ویژگی های شاخص  HTML5 که  شامل: آهنگ، ویدئو، ذخیره در حالت آفلاین و &#8230; را با اصول <a href="http://asiait.ir/seo.html" target="_blank">بهینه سازی سایت</a>(<a href="http://asiait.ir/seo.html" target="_blank">سئو</a>) همراه کنند. همچنین HTML6 این امکان را برای کاربران خود بوجود آورده است که از خاصیت و ویژگی نوعی از برچسب ها را استفاده کنند، مانند برچسب link و script؛ و حتی امکان استفاده از برچسب­ های &lt;article&gt; و&gt; &lt;section را در بهترین حالت ممکن ساخته است. تاکنون ترفند های زیادی ابداع نشده است که بتوان به وسیله ی آن ها به نتایج مطلوب رسید، به همین دلیل هنگام استفاده باید هوشمندانه عمل کرد.</p>
<p>مفهوم HTML 6:</p>
<p>ورژن HTML6 نسخه ی ارتقا یافته ­­ی  HTML ها است که دارای NameSpaces با ساختار XML می باشد. از ویژگی های مهم NameSpaces این است که با استفاده از برچسب­های &lt;logo/&gt;&lt; logo&gt;  و &lt;toolbar/&gt;&lt; toolbar&gt; قادر خواهید بود امکانی فراهم کنید که سایت قادر به شناسایی و تشخیص لوگو در صفحات وب سایت باشد. یکی دیگر از امکانات HTML6  این است که توسعه دهندگان وب و برنامه­ نویسان در <a title="آسیا آی تی" href="http://asiait.ir/" target="_blank">طراحی سایت</a> مورد نظرشان می توانند ار برچسب &lt;container&gt; به جای &lt;div id =’container’&gt; استفاده کنند.</p>
<p><a href="http://blog.asiait.ir/asa-content/uploads/2015/05/maxresdefault.jpg"><img class="alignnone size-medium asa-image-1051" src="http://blog.asiait.ir/asa-content/uploads/2015/05/maxresdefault-300x170.jpg" alt="maxresdefault" width="300" height="170" /></a></p>
<p>در حالت کلی  HTML6 دارای دو نوع برچسب منفرد حامل اطلاعات و ویژگی ها است، اما داده ها شامل متن نمی­ باشند، همچنین برچسب­ های جفتی می­توانند همراه با متن باشند. برخی از برچسب­های منفرد که در HTML6 قرار دارند که می­ توانند دارای namesapec   های زیر باشند:</p>
<p>&lt;html:html&gt;</p>
<p>&lt;html:head&gt;</p>
<p>&lt;html:title&gt;</p>
<p>&lt;html:meta&gt;</p>
<p>&lt;html:link&gt;</p>
<p>&lt;html:a&gt;</p>
<p>&lt;html:media&gt;</p>
<p>&lt;html:body&gt;</p>
<p>&lt;html:button&gt;</p>
<p>چند ویژگی که HTML6 را متمایز می کند:</p>
<ul>
<li>امکان تغییر سایز تصاویر در مرورگر ها</li>
<li>زبان­های قابل اجرا</li>
<li>مدیریت بهتر در کنترل اشیای ویدئویی</li>
<li>پیش پردازنده های جایگزین</li>
<li>دسترسی امن به اطلاعات</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d9%87-%d8%b3%d8%a8%da%a9-html6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>اشتباهات بزرگ در زبان HTML  که هرگز نباید مرتکب شوید</title>
		<link>http://blog.asiait.ir/%d8%a7%d8%b4%d8%aa%d8%a8%d8%a7%d9%87%d8%a7%d8%aa-%d8%a8%d8%b2%d8%b1%da%af-%d8%af%d8%b1-%d8%b2%d8%a8%d8%a7%d9%86-html-%da%a9%d9%87-%d9%87%d8%b1%da%af%d8%b2-%d9%86%d8%a8%d8%a7%db%8c%d8%af-%d9%85%d8%b1/</link>
		<comments>http://blog.asiait.ir/%d8%a7%d8%b4%d8%aa%d8%a8%d8%a7%d9%87%d8%a7%d8%aa-%d8%a8%d8%b2%d8%b1%da%af-%d8%af%d8%b1-%d8%b2%d8%a8%d8%a7%d9%86-html-%da%a9%d9%87-%d9%87%d8%b1%da%af%d8%b2-%d9%86%d8%a8%d8%a7%db%8c%d8%af-%d9%85%d8%b1/#comments</comments>
		<pubDate>Fri, 01 May 2015 12:59:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[blink]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[inline]]></category>
		<category><![CDATA[marquee]]></category>
		<category><![CDATA[اشتباهات بزرگ در زبان HTML]]></category>
		<category><![CDATA[اشتباهات بزرگ در زبان HTML که هرگز نباید مرتکب شوید]]></category>
		<category><![CDATA[تگ alt]]></category>
		<category><![CDATA[تگهای Heading]]></category>
		<category><![CDATA[خصوصیت alt]]></category>
		<category><![CDATA[عناصر]]></category>
		<category><![CDATA[عناصر block]]></category>
		<category><![CDATA[عناصر inline]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=1014</guid>
		<description><![CDATA[آموزش اصول کدنویسی و طراحی سایت کار بسیار پیچیده و سختی نیست اما آشنایی و تسلط بر این قوانین و رعایت اصول استاندارد و صحیح در کدنویسی نیاز به تجربه و کار بسیار دارد . در این مجموعه به بررسی ده اشتباه بزرگ در نوشتن کدهای HTML میپردازیم که رعایت آنها می تواند در استاندارد ...]]></description>
				<content:encoded><![CDATA[<p>آموزش اصول کدنویسی و <a href="http://asiait.ir" target="_blank"><strong>طراحی سایت</strong></a> کار بسیار پیچیده و سختی نیست اما آشنایی و تسلط بر این قوانین و رعایت اصول استاندارد و صحیح در کدنویسی نیاز به تجربه و کار بسیار دارد . در این مجموعه به بررسی ده اشتباه بزرگ در نوشتن کدهای HTML میپردازیم که رعایت آنها می تواند در استاندارد سازی کدهای HTML شما تاثیر بسیاری داشته باشد . شاید بتوان گفت تفاوت یک <a href="http://asiait.ir/web-design.html" target="_blank">طراح وب سایت</a> حرفه ای و آماتور در رعایت همین اصول و قوانین است که در زیر به چند مورد از آنها اشاره میشود .</p>
<h2>گذاشتن تگ های Block در بین تگ های Inline</h2>
<p>عناصر  HTML  به دو گروه inline و block گروه بندی می شوند . هر تگ به صورت پیش فرض دارای خصوصیت inline و یا block است . عناصر block تگهایی مانند div , p و مواردی دیگر را شامل میشند که بیشتر در ایجاد ساختار صفحات مورد استفاده قرار میگیرند . عناصر Inline با توجه به نوع و خصوصیت شان باید در درون عناصر block قرار بگیرند تا بتوانند با استفاده از این نوع از تگها در جریان صفحه قرار بگیرند .</p>
<h4>ایا استفاده از عناصر block در بین تگهای inline کار اشتباهیست ؟ جواب  بله است و هرگز نباید انجام دهید .</h4>
<h4>اما میتوانید  عناصر inline به راحتی درون عناصر block قرار خواهند گرفت .</h4>
<figure id="attachment_523" style="width: 423px;" class="asa-caption alignnone"><a href="http://blog.asiait.ir/asa-content/uploads/2015/03/html.jpg"><img class=" asa-image-523" src="http://blog.asiait.ir/asa-content/uploads/2015/03/html-300x166.jpg" alt="html" width="423" height="234" /></a><figcaption class="asa-caption-text">html</figcaption></figure>
<div>
<div id="highlighter_382832" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;a href="http://www.asiait.ir" &gt; &lt;h1&gt;طراحی سایت&lt;/h1&gt; &lt;/a&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;h1&gt;&lt;a href="http://www.asiait.ir" &gt;طراحی سایت&lt;/a&gt;&lt;/h1&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3> خصوصیت تگ alt به تصاویر اضافه نکنید</h3>
<p>از خصوصیت تگ alt برای تصاویر استفاده کنید زیرا یک قانون است . برای استاندارد سازی کدهای HTML خود حتما این نکته را رعایت کنید .استفاده از alt برای تصاویر به بازدیدکنندگان صفحات وب سایت شما و همچنین موتورهای جستجو کمک میکند تا موضوع تصویر منتشر شده در وب سایت شما را تشخیص دهند . این نکته زمانی پر رنگ تر و مهم تر میشود که مخاطبان شما از سرعت اینترنت پایین و یا مرورگرهای متنی ( مانند موتورهای جستجو ) استفاده میکنند و یا به هر دلیلی این تصویر در مرورگر بازدیدکننده وب سایت شما نمایش داده نشده است . از این خصوصیت حتی در هنگامی که توضیحی برای تصویر خود ندارید نیز استفاده نمائید و مقدار آن را خالی بگزارید . میتوانید در مورد اهمیت این خصوصیت برای تصاویر مطلب <a href="http://asiait.ir" target="_blank"><strong>بهینه سازی سایت</strong></a> را نیز مطالعه نمائید .</p>
<h4>استفاه نکردن از خصوصیت alt برای تصاویر یک اشتباه بزرگ است .</h4>
<p>.</p>
<div>
<div id="highlighter_125751" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;img src="logo.png" /&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;img src="logo.png" alt="asiait.ir logo"  /&gt;</code></div>
<div class="line number3 index2 alt2"><code class="plain plain">&lt;img src="logo.png" alt=""/&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده نکردن از لیست ها – ul , ol – در جای لازم</h3>
<p>تگهای ul,ol,li برای لیست کردن مطالب ساخته شده اند و کار با آنها بسیار ساده و راحت است و توانایی های بسیاری را برای کنترل لیست به وسیله css ایجاد خواهد نمود . استفاده از تگهای p , br و هر نوع دیگر از کدهای HTML به غیر از تگهای تعریف شده لیست ها ، برای شکل دهی یک لیست کار اشتباهیست که هرگز نباید انجام شود .</p>
<div>
<div id="highlighter_50190" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;p&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain spaces">    </code><code class="plain plain">طراحی سایت &lt;br/&gt;</code></div>
<div class="line number3 index2 alt2"><code class="plain spaces">    </code><code class="plain plain">بهینه سازی سایت &lt;br/&gt;</code></div>
<div class="line number4 index3 alt1"><code class="plain spaces">    </code><code class="plain plain">طراحی وب سایت  &lt;/br&gt;</code></div>
<div class="line number5 index4 alt2"><code class="plain plain">&lt;/p&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_879571" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;ul&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain spaces">  </code><code class="plain plain">&lt;li&gt;طراحی سایت &lt;/li&gt;</code></div>
<div class="line number3 index2 alt2"><code class="plain spaces">  </code><code class="plain plain">&lt;li&gt;بهینه سازی سایت &lt;/li&gt;</code></div>
<div class="line number4 index3 alt1"><code class="plain spaces">  </code><code class="plain plain">&lt;li&gt;طراحی وب سایت  &lt;/li&gt;</code></div>
<div class="line number5 index4 alt2"><code class="plain plain">&lt;/ul&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده از تگهای b,I,strong,em برای bold و italic کردن متن بدون در نظر گرفتن موتورهای جستجو</h3>
<p>تگهای b و i میتوانند یک متن و یا کلمه را به حالت bold و Italic تغییر دهند . شاید با وجود CSS و توانائیهای فوق العاده در کنترل متن ها به ذهن شما برسد که از این ابزار برای راحتی کار خود استفاده نمائید . توانائیهای font-weight و font-style میتوانند جایگزین خوبی برای b و i باشند اما مشکلاتی را نیز خواهد داشت . در مواردی مخاطبان شما از مرورگرهای متنی بدون استفاده از style ها استفاده خواهند کرد که در اینصورت تفاوتی مابین کلمات bold و italic شده توسط CSS با سایر کلمات نخواهند دید و این مشکل باعث کاهش خوانایی مطالب شما می شود و کلمات با درجه اهمیت بیشتر مورد توجه مخاطب قرار نخواهد گرفت .</p>
<p>اگر شما به بهینه سازی وب سایت خود برای موتورهای جستجو اهمیت می دهید بهتر است از تگهای strong و em به صورت مستقیم در کد HTML به جای تگهای b و i و همچنین style ها استفاده نمائید . به این نکته بسیار مهم توجه داشته باشید که تگ های b و i تگهای نمایشی هستند و تگهای strong و em تگهای مفهومی و نمایشی هستند .</p>
<p>مفهوم این جمله این خواهد بود که متن ها به وسیله b و i فقط یک تغییر حالت ظاهری پیدا کرده اند و به همین دلیل مورد توجه موتورهای جستجو قرار نخواهند گرفت . اما با استفاده از تگهای strong و em شما به همراه تغییرات ظاهری یک شخصیت نیز به متن خود خواهید بخشید و اعلام خواهید کر که این متن در داخل این نوع از تگها از اهمیت بیشتری برخوردار خواهد بود .</p>
<p>بنابراین سعی کنید از این نوع از تگها در جای مناسب خود استفاده نمائید .از b و i در زمانی که نیازی به پر اهمیت کردن متن داخل این تگها نیست و فقط می خواهید شکل ظاهری را تغییر دهید و از strong و em در مواردی که علاوه بر شکل ظاهری می خواهید درجه اهمیت متن داخل آن را نیز نسبت به سایر کلمات افزایش دهید استفاده نمائید .</p>
<div>
<div id="highlighter_151054" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;b&gt;asiait.ir&lt;/b&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;i&gt;asiait.ir&lt;/i&gt;</code></div>
<div class="line number3 index2 alt2"><code class="plain plain">&lt;span style="font-weight:bold"&gt; asiait.ir &lt;/span&gt;</code></div>
<div class="line number4 index3 alt1"><code class="plain plain">&lt;span style="font-style:italic"&gt; asiait.ir &lt;/span&gt;</code></div>
<div class="line number5 index4 alt2"><code class="plain plain">&lt;strong&gt; asiait.ir &lt;/strong&gt;</code></div>
<div class="line number6 index5 alt1"><code class="plain plain">&lt;em&gt; asiait.ir &lt;/em&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده بیش از حد از تگ br</h3>
<p>تگ br برای ایجاد فاصله و شکست تنها یک خط در متن مورد استفاده قرار می گیرد . استفاده از تگ br برای ایجاد فاصله هایی بیشتر از یک خط در بین خطوط و یا عناصر دیگر اشتباه است . برای ایجاد فاصله بیشتر از یک خط در بین خطوط می توانید به راحتی از تگهای p و یا خصویت padding و margin و حتی line-height استفاده نمائید .</p>
<div>
<div id="highlighter_473248" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;p&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">asiait.ir &lt;br/&gt;&lt;br/&gt;</code></div>
<div class="line number3 index2 alt2"><code class="plain plain">طراحی سایت  </code></div>
<div class="line number4 index3 alt1"><code class="plain plain">&lt;/p&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_267529" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;p&gt;aasiait.ir&lt;/p&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;p&gt;طراحی سایت  &lt;/p&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده از تگهای s , strike برای نمایش متن های حذف شده</h3>
<p>در نسخه های قدیمی تری از HTML از این دو نوع تگ برای نشان دادن کلمات حذف شده ( Strikethrough ) – با ایجاد یک خط بر روی آنها – استفاده می شده است . این نوع از تگ ها با ورود نسخه های جدیدی از HTML دگرگون شده اند و تگهای strike و s که قبلا برای این منظور استفاده می شده اند دیگر کاربردی نخواهند داشت و استفاده از آنها غیر استاندارد خواهد بود .</p>
<p>در نسخه های جدید از تگهای del – برای نشان دادن متن حذف شده – و از تگ ins – برای نشان دادن متن وارد شده به جای متن حذف شده – به همراه هم استفاده می شود .</p>
<h4>بنابراین دچار اشتباه نشوید و از strike و s استفاده نکنید .</h4>
<div>
<div id="highlighter_757251" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;s&gt;کلمه حذف شده&lt;/s&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;stricke&gt; کلمه حذف شده&lt;/stricke&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_649029" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;del&gt;کلمه حذف شده&lt;/del&gt;&lt;ins&gt;کلمه جایگزین شده&lt;/ins&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده از inline style</h3>
<p>هر چند که از style ها می توان به سه روش متفاوت استفاده نمود و یکی از این سه روش استفاده از style های inline در داخل هر تگ است . اما توصیه میشود که از inline style استفاده کمتری نمائید . استفاده از style های inline یک کار غیر استاندارد نیست اما دارای مشکلات و معایبی است که میتواند ما را برای استفاده از این نوع از style منصرف کند .</p>
<ul>
<li>ویرایش این نوع از style با توجه به خطی بودن آنها بسیار مشکل است و با افزایش تعداد سندهای HTML گاهی به کار غیر ممکنی تبدیل می شود .</li>
<li>این نوع از style حجم صفحات را به شدت افزایش می دهد و این نکته ای بسیار منفی است .</li>
<li>کدها را به هم ریخته و ناخوانا خواهند کرد و ویرایش کد ها را – از نظر خوانایی – بسیار سخت خواهد نمود .</li>
<li>گاهی کدهای CSS خارجی را دچار مشکل می کنند – کدهای inline بر کدهای CSS خارجی تقدم دارند –</li>
</ul>
<p>با همه این مشکلات در موارد بسیار خاصی استفاده از این تگها می تواند مشکلات شما را برطرف نماید .</p>
<h4>اما به صورت عمومی استفاده از inline style توصیه نمی شود .</h4>
<div>
<div id="highlighter_367521" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;h2 style="color:red;"&gt;asiait.ir&lt;/h2&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>اضافه و حذف کردن border در تگ HTML</h3>
<p>Border ها یکی دیگر از خصوصیات تعدادی از عناصر HTML هستند که شما می توانید با استفاده از این خصوصیت به صورت مستقیم در تعدادی از تگهای HTML آنها را حذف ، اضافه و ویرایش نمائید .</p>
<p>در استاندارد های امروزی استفاده از این نوع خصوصیت به صورت مستقیم در تگهای HTML توصیه نمی شود و بهتر است به جای استفاده از این خصوصیت در تگهای HTML چشم پوشی نمائید و تغییرات مورد نظر خود را با استفاده از خصوصیت border در CSS انجام دهید . شما با استفاده از CSS توانایی بیشتری در کنترل این خصوصیت خواهید داشت .</p>
<div>
<div id="highlighter_658736" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;img  src="logo.png"  border="0" alt="" /&gt; </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_641088" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;img  src="logo.png" alt="" /&gt; </code></div>
<div class="line number2 index1 alt1"><code class="plain plain">Img { border:none; }</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده نکردن از تگهای Heading</h3>
<p>حتما از اهمیت تگ های heading – h1,h2,h3,h4,h5,h6 – با خبر هستید . قبلا مطالبی در مورد اهمیت این تگها در چینش صفحات و همچنین اهمیت آنها برای موتورهای جستجو منتشر شده است .</p>
<p>استفاده مناسب از عنوان ها – آموزش بهینه سازی سایت</p>
<p>اهمیت تگ های h1,h2,h3,h4,h5,h6 در چینش صفحات وب سایت</p>
<p>از این تگها برای مشخص نمودن سر فصل ها و تیتر ها برای مطالب منتشر شده در وب سایت با توجه به درجه اهمیت آنها استفاده می شود .</p>
<p>استفاده از انواع تگهای دیگر و استفاده از CSS برای تغییر ظاهری عناصری غیر از تگهای heading ، برای ایجاد سرفصل اشتباه بزرگی خواهد بود . سر فصل هایی که با تگهایی غیر از تگهای Heading ایجاد شده اند در مرورگرهای متنی قابل تشخیص نخواهند بود و همچنین از نظر موتورهای جستجو اهمیتی نخواهند داشت .</p>
<div>
<div id="highlighter_981162" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;p&gt;&lt;strong&gt;یک متن برای سر فصل&lt;/strong&gt;&lt;/p&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_249367" class="syntaxhighlighter  plain">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;h3&gt;یک متن برای سر فصل&lt;/h3&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>استفاده از تگهای blink و marquee</h3>
<p>جدای از غیر استاندارد اعلام شدن این تگ ها توسط سازمان جهانی استانداردهای وب wc3 ، استفاده از این نوع از تگها در طراحی شما میتواند فاجعه ساز شود !!</p>
<p>برای ایجاد حس توجه و نشان دادن اهمیت یک موضوع و جلب توجه مخاطبان خود بهتر است از روشهای دیگری استفاده نمائید . این گونه از تگها بر خلاف تصور شما ممکن است موجب عدم توجه به وب سایت شما شود . میتوانید مطالب بیشتری را در مورد این دو نوع از تگ در <a class="externalLink" href="http://en.wikipedia.org/wiki/Marquee_element" target="_blank">دانشنامه ویکی پدیا</a> مطالعه نمائید</p>
<h3 style="text-align: center;"><a href="http://asiait.ir" target="_blank">طراحی سایت</a> |  <a href="http://asiait.ir/seo.html" target="_blank">بهینه سازی سایت</a> | <a href="http://asiait.ir" target="_blank">طراحی وب سایت</a> |  <a href="http://asiait.ir/portal-design.html" target="_blank">طراحی پرتال</a></h3>
<div>
<div id="highlighter_557177" class="syntaxhighlighter  plain">
<table style="height: 80px;" border="0" width="718" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="plain plain">&lt;blink&gt; به من نگاه کنید  &lt;/blink&gt;</code></div>
<div class="line number2 index1 alt1"><code class="plain plain">&lt;marquee  width="100%" behavior="alternate" bgcolor="yellow" &gt;This is an example..&lt;/ marquee &gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%a7%d8%b4%d8%aa%d8%a8%d8%a7%d9%87%d8%a7%d8%aa-%d8%a8%d8%b2%d8%b1%da%af-%d8%af%d8%b1-%d8%b2%d8%a8%d8%a7%d9%86-html-%da%a9%d9%87-%d9%87%d8%b1%da%af%d8%b2-%d9%86%d8%a8%d8%a7%db%8c%d8%af-%d9%85%d8%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>طراحی سایت با زبان ASP.NET  یا PHP &#8211; تفاوت PHP و ASP.NET</title>
		<link>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d8%a7-%d8%b2%d8%a8%d8%a7%d9%86-asp-net-%db%8c%d8%a7-php-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-php-%d9%88-asp-net/</link>
		<comments>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d8%a7-%d8%b2%d8%a8%d8%a7%d9%86-asp-net-%db%8c%d8%a7-php-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-php-%d9%88-asp-net/#comments</comments>
		<pubDate>Sat, 11 Apr 2015 07:29:19 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[وب]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[آیا سایت های بزرگی مانند گوگل، فیسبوک با php برنامه نویسی شده اند]]></category>
		<category><![CDATA[زبان برنامه نویسی فیسبوک]]></category>
		<category><![CDATA[شسح]]></category>
		<category><![CDATA[طراحی سایت با زبان ASP.NET یا PHP - تفاوت PHP و ASP.NET]]></category>
		<category><![CDATA[چه زمانی بهتر است از asp.net استفاده کنیم]]></category>
		<category><![CDATA[چه زمانی بهتر است از php استفاده کنیم]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=878</guid>
		<description><![CDATA[طراحی سایت با زبان ASP.NET  یا PHP &#8211; تفاوت PHP و ASP.NET تفاوت زبان برنامه نویسی php و سکوی asp.net برای طراحی سایت بحثی بسیار طولانی و پایان ناپذیر است. اکثر شرکت ها طراحی سایت و برنامه نویسانی که یک زبان برنامه نویسی را یاد میگیرند علاقه مند به دفاع کردن از آن زبان هستند ...]]></description>
				<content:encoded><![CDATA[<h2><a href="http://asiait.ir" target="_blank">طراحی سایت</a> با زبان ASP.NET  یا PHP &#8211; تفاوت PHP و ASP.NET</h2>
<p>تفاوت زبان برنامه نویسی php و سکوی asp.net برای <a href="http://asiait.ir" target="_blank">طراحی سایت</a> بحثی بسیار طولانی و پایان ناپذیر است. اکثر شرکت ها <a href="http://asiait.ir" target="_blank">طراحی سایت</a> و برنامه نویسانی که یک زبان برنامه نویسی را یاد میگیرند علاقه مند به دفاع کردن از آن زبان هستند و بعضا دلایل غیر منطقی و غیر علمی برای کار خودشان دارند. علت اینکه گروه آسیا مصمم شد این مقاله را بنویسه دامن زدن به بحث های طولانی و غیر منطقی که بین برنامه نویسان زبان های php و asp.net وجود دارد نیست زیرا شخصا اعتقاد دارم که زبان های برنامه نویسی ابزار هستند و در صنعت نرم افزار نیروی انسانی و تخصص است که حرف اول را می زند نه یک زبان برنامه نویسی. یک برنامه نویس بد با هر زبانی میتواند یک برنامه ضعیف، کند، غیر ایمن و سرشار از باگ را تولید کند و یک برنامه نویس خوب با یک زبان قدیمی نیز می تواند یک برنامه خوب بنویسد.</p>
<p>دلیل اصلی <strong><a href="http://blog.asiait.ir" target="_blank">بلاگ آی تی</a></strong> از نوشتن این مقاله صحبت هایی است که به طور اتفاقی در دو جلسه متفاوتی که داشتم شنیدم، دلایل مطرح شده در دفاع از زبان اسکریپتی php به قدری برای ما عجیب بود که نهایتا مجبور شدم در اینترنت جستجو کرده و به دنبال کشف واقعیت باشیم.</p>
<p>&nbsp;</p>
<p>قبل از اینکه وارد مباحث مربوط به مقایسه این دو زبان بشویم لازم است این نکته را مطرح کنم که من به عنوان برنامه نویس وب بیش از 15 سال تجربه برنامه نویسی دارم و در این مدت با زبان ها و پلتفرم هایی مانند جاوا، php ، asp، و asp.net کار کرده ام و به تمام آنها مسلط هستم.</p>
<p>برخی از مواردی که در دفاع از php مطرح می شوند عبارتند از:</p>
<h2><b>آیا سرعت php از asp.net بیشتر است یا بلعکس ؟</b></h2>
<p>مهم ترین دلیل که برنامه نویسان php برای دفاع از آن مطرح می کنند سرعت آن است و میگویند که سرعت php از asp.net بیشتر است، در حالیکه آزمایشات انجام شده نتیجه کاملا متفاوت را نشان می دهند. از نظر منطقی نیز چنین چیزی امکان ندارد به این دلیل که کدهای خروجی asp.net در سمت سرور تفسیر نمی شوند و به صورت dll هستند و web server در زمان اجرای کدها هیچگونه زمانی برای تفسیر آنها نمی گذارد و با سریعترین زمان ممکن اجرا می شوند. لذا چنین حرفی هیچ پایه و اساس علمی ندارد.</p>
<p>برای بررسی سرعت میان زبان های سمت سرور و مقایسه سرعت php و asp.net مقاله زیر را مشاهده کنید:</p>
<p>مقایسه سرعت php ، asp ، asp.net و cgi</p>
<p>همانطور که در نتایج آزمایش مقاله فوق مشخص است، سرعت asp.net قابل مقایسه با سایر زبان ها و تکنولوژی ها نیست و به مقدار قابل توجهی مخصوصا در زمانی که مقدار داده ها افزایش می یابد و مقیاس سازمانی است سریع تر است.</p>
<h2>
<b>آیا امنیت php بالاتر  از asp است؟</b></h2>
<p>ایمن بودن نرم افزارهای کدباز ( اپن سورس ) یکی از مباحثی است که برخی برنامه نویسان مطرح می کنند. به طور کلی هر سیستمی که افراد زیادی بر روی آن کار کنند و استفاده کنندگان زیادی داشته باشد به مرور تکمیل می شود. اما کدباز بودن نه تنها دلیل بر ایمن بودن نیست بلکه در بسیاری از موارد ممکن است باعث شود که سیستم فوق مورد حمله قرار گرفته و هک شود. به عنوان مثال پلتفرم جوملا که بر پایه php است یکی از ضعیف ترین پلتفرم ها از نظر امنیتی است و هر از چندگاهی شاهد هک شدن نسخه های مختلف آن در اینترنت هستیم.</p>
<p>برخی از مشکلات امنیتی که ممکن است به خاطر برنامه نویسی سایت پیش بیاید عبارتند از:</p>
<p>Remote code execution<br />
SQL injection<br />
Cross Site Scripting (XSS)<br />
Session Hijacking<br />
XSRF</p>
<p>هیچکدام از موارد بالا ارتباطی به زبان برنامه نویسی ندارد و برنامه نویس باید با موارد فوق آشنا باشد تا مشکل امنیتی برای آن بوجود نیاید. ضمن اینکه سیستم های بسیار زیادی در دنیا وجود دارند که با پلتفرم دات نت کار میکنند و اگر این پلتفرم مشکل داشت قطعا هیچ کدام از این شرکت ها به سمت آن نمی رفتند.</p>
<h2></h2>
<h2><b>آیا سایت های بزرگی مانند <a href="http://google.com" target="_blank">گوگل</a>، <a href="http://facebook.com" target="_blank">فیسبوک</a> با php برنامه نویسی شده اند</b></h2>
<h2><b>؟ </b></h2>
<p>پاسخ این سوال کاملا منفی است! سایت های فوق عمدتا از زبان های c++ پایتون و جاوا برای برنامه نویسی سمت سرور خود استفاده می کنند و به هیچ وجه از پلتفرم های اپن سورس مثل php در طراحی بخش های اصلی آنها استفاده نشده است. تنها گوگل برای برخی از سرویس های جانبی خود به طور محدود از زبان php استفاده می کند. تنها سایت پربازدید دنیا که از php استفاده می کرده است سایت یاهو است که آن هم در حال انتقال برنامه های خود به زبان جدید node.js است.</p>
<p>برای مشاهده زبان های استفاده شده در سایت های بزرگ اینترنتی می توانید به لینک زیر مراجعه نمایید:</p>
<h2><a href="http://blog.asiait.ir/asa-content/uploads/2015/04/asp-php.jpg"><img class=" size-medium asa-image-879 aligncenter" src="http://blog.asiait.ir/asa-content/uploads/2015/04/asp-php-300x198.jpg" alt="تفاوت php و asp.net" width="300" height="198" /></a></h2>
<h2><b>اگر ایران از قانون کپی رایت حمایت کند &#8230;.<br />
</b></h2>
<p>در حال حاضر درصد قابل توجهی از سایت های بزرگ اینترنتی بر پایه asp.net طراحی شده اند، سوال اینجاست که مگر کشورهای دیگه از قانون کپی رایت حمایت نمی کنند؟ پس چرا با این وجود استفاده از تکنولوژی دات نت روز به روز در این کشورها رو به افزایش است؟ متاسفانه زمانی که ما میخواهیم هزینه استفاده از یک سیستم را محاسبه کنیم فقط به قیمت خرید آن فکرمیکنیم و این فرهنگ در ما ایرانی ها وجود دارد.</p>
<p>درست است که زبان php یک زبان اپن سورس و رایگان است، اما اگر شما بخواهید یک پورتال اینترنتی را با استفاده از آن طراحی کنید این کار چقدر زمان خواهد برد؟ آیا خروجی پروژه به مقدار کافی مقیاس پذیر خواهد بود؟ آیا قابلیت توسعه و گسترش کافی خواهد داشت؟ اگر هزینه استخدام یک برنامه نویس n تومان در ماه باشد و پروژه php سه ماه طول بکشد و پیاده سازی همان پروژه با asp.net یک ماه زمان بخواهد، عاقلانه خواهد بود که با خرید لایسنس به سمت asp.net برویم یا از سیستم رایگان php استفاده کنیم؟</p>
<p>اگر منطق فوق درست بود، تا کنون تمام کشورهای دنیا از php استفاده می کردند و کسی به سراغ asp.net نمی رفت در حالیکه در عمل می بینیم که چنین نیست.</p>
<p>گرچه سعی کردم بی طرفانه به مقایسه هر دو تکنولوژی فوق بپردازم اما واقعیت این است که پلتفرم asp.net از نظر امکانات، سطح تکنولوژِی و قابلیت هایی که دارد به هیچ وجه قابل مقایسه با زبان اسکریپتی php نیست. استفاده از php تنها زمانی منطقی است که یک اسکریپت رایگان و آماده برای پروژه ای که می خواهید انجام دهید وجود داشته باشد و نوشتن مجدد کد مقرون به صرفه نباشد. از طرف دیگر به دلیل اینکه سرورهای لینوکس از asp.net پشتیبانی نمیکنند و قیمت ارزان تری نسبت به سرورهای ویندوزی دارند، بسیاری از افراد به دلیل صرفه جویی در زمینه هاست به سراغ php می روند، در حالیکه به دلیلی که در بخش قانون کپی رایت ذکر کردم چنین کاری مقرون به صرفه نیست!</p>
<h2><b>چه زمانی بهتر است از php استفاده کنیم؟</b></h2>
<ul>
<li>اگر پروژه ای که میخواهید انجام دهید یک پروژه کوچک است و در مقیاس های بزرگ عملیاتی اجرائی نمیشود php میتواند گزینه خوبی باشد.</li>
<li>اگر اسکریپت های آماده و کدهای آماده برای پروژه فوق به زبان php وجود دارند، گزینه مناسبی است.</li>
<li>اگر سرور شما لینوکس است، از php استفاده کنید.</li>
</ul>
<h2><b>چه زمانی بهتر است از asp.net استفاده کنیم؟</b></h2>
<ul>
<li>اگر پروژه شامل انواع نقش های سیستمی و سطوح دستری مختلف و یک پورتال است از دات نت استفاده کنید</li>
<li>اگر می خواهید از ساختارهای نوین برنامه نویسی مانند MVC استفاده کنید از دات نت استفاده کنید</li>
<li>اگر می خواهید نرم افزار وب شما به صورت شی گرا تولید شود از دات نت استفاده کنید</li>
<li>اگر به دنبال توسعه ساختار و پشتیبانی سیستم در دراز مدت هستند و دید کوتاه مدت به پروژه ندارید از دات نت استفاده کنید</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b3%d8%a7%db%8c%d8%aa-%d8%a8%d8%a7-%d8%b2%d8%a8%d8%a7%d9%86-asp-net-%db%8c%d8%a7-php-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-php-%d9%88-asp-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>سی شارپ ( #C )</title>
		<link>http://blog.asiait.ir/%d8%b3%db%8c-%d8%b4%d8%a7%d8%b1%d9%be-c/</link>
		<comments>http://blog.asiait.ir/%d8%b3%db%8c-%d8%b4%d8%a7%d8%b1%d9%be-c/#comments</comments>
		<pubDate>Sat, 28 Mar 2015 12:41:24 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[#]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[سی ++]]></category>
		<category><![CDATA[سی شارپ]]></category>
		<category><![CDATA[شارپ]]></category>

		<guid isPermaLink="false">http://blog.asiait.ir/?p=678</guid>
		<description><![CDATA[سی شارپ ( #C ) زبانی شیءگرا و سطح بالا از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است. زبان سی شارپ، یک زبان برنامه‌نویسی چند الگویی و است و منظم شده مدل‌های تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت می‌باشد. این زبان توسط مایکروسافت و جزئی از دات نت به ...]]></description>
				<content:encoded><![CDATA[<p><b>سی شارپ</b> ( <strong><span lang="en" xml:lang="en">#C </span></strong>) زبانی شیءگرا و سطح بالا از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.</p>
<p>زبان سی شارپ، یک زبان برنامه‌نویسی چند الگویی و است و منظم شده مدل‌های تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت می‌باشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز در بر گرفت. سی شارپ یکی از ۴۴ زبان برنامه‌نویسی است که توسط زمان اجرای زبان مشترک از چارچوب دات‌نت پشتیبانی می‌شوند و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته می‌شود.</p>
<p>زبان سی شارپ با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.</p>
<p>این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبان‌های جاوا و دلفی<sup>نیازمندمدرک</sup> تاثیر پذیرفته‌است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد. آخرین نسخه آن نسخه ۵٫۰ است که همزمان با دات‌نت ۴٫۵ در آگوست ۲۰۱۲ منتشر شد.</p>
<p>&nbsp;</p>
<h2><span id=".D8.A7.D9.87.D8.AF.D8.A7.D9.81_.D8.B7.D8.B1.D8.A7.D8.AD.DB.8C_.D8.B2.D8.A8.D8.A7.D9.86" class="mw-headline">اهداف طراحی زبان</span></h2>
<ul>
<li>استاندارد ECMA این اهداف طراحی زبان را برای سی شارپ بر آورده می‌سازد:</li>
<li>سی شارپ یک زبان برنامه‌سازی ساده، مدرن، برای اهداف عمومی و شیءگرا است.</li>
<li>به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره‌وری برنامه‌نویس، زبان دارای چک‌کننده Strong Type، چک‌کننده مرزهای آرایه، تشخیص حالت‌هایی که یک متغیر مقداردهی اولیه نشده‌است، قابلیت انتقال کدها و Garbage Collection خودکار است.</li>
<li>این زبان برای استفاده در اجزای توسعه نرم‌افزار برای دستیابی به مزایای سامانه‌های توزیعی در نظر گرفته شده‌است.</li>
<li>قابلیت انتقال برنامه‌نویس بسیار مهم است، خصوصاً برای آن دسته از برنامه‌نویسانی که با زبان‌های C و C++ آشنا هستند.</li>
<li>پشتیبانی از این زبان برای بین‌المللی شدن بسیار مهم است.</li>
<li>زبان سی شارپ برای نوشتن برنامه‌ها برای سامانه‌های تعبیه شده و میزبان در نظر گرفته شده‌است، سیستم‌عامل‌های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.</li>
<li>هر چند برنامه‌های نوشته شده با سی شارپ طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان‌های C و اسمبلی نیست.</li>
</ul>
<p><a href="http://blog.asiait.ir/asa-content/uploads/2015/03/shutterstock_102665846.jpg"><img class=" asa-image-679" src="http://blog.asiait.ir/asa-content/uploads/2015/03/shutterstock_102665846-300x214.jpg" alt="سی شارپ" width="493" height="262" /></a></p>
<h2><span id=".D8.AA.D8.A7.D8.B1.DB.8C.D8.AE.DA.86.D9.87" class="mw-headline">تاریخچه</span></h2>
<p>در سال ۱۹۹۹، شرکت سان اجازه استفاده از <a href="http://blog.asiait.ir/category/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C/%D8%AC%D8%A7%D9%88%D8%A7/" target="_blank">زبان برنامه‌نویسی جاوا</a> را در اختیار ماکروسافت قرار داد تا در سیستم‌عامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستم‌عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم‌عامل بودن جاوا را از آن برداشت. شرکت سان پرونده‌ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس‌های کتابخانه‌ای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شیءگرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب دات‌نت در PDC در سال ۲۰۰۰ این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس‌ها و runtime در ای‌اس‌پی‌دات‌نت به سی شارپ منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان‌های برنامه سازی++Borland، دلفی (شهر)، Turbo Pascal، ویژوال سی++ به آسانی در دستورالعمل‌های <strong class="selflink">سی شارپ</strong> قابل رویت است و به همان خوبی در هسته CLR.</p>
<h2><span id=".D9.88.DB.8C.DA.98.DA.AF.DB.8C.E2.80.8C.D9.87.D8.A7" class="mw-headline">ویژگی‌ها</span></h2>
<p>برخی از تفاوت‌های زبان سی شارپ با C و ++C عبارتند از:</p>
<ul>
<li>هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند. این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس‌های عمومی استفاده کرد.</li>
<li>متغیرهای عمومی، بر خلاف C و ++C، نمی‌توانند بلاک‌های پیوستی را در بر بگیرند.</li>
<li><strong class="selflink">سی شارپ</strong> دارای یک نوع داده بولی است (bool). برخی از عبارت‌ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند. همان طور که ++C نیز دارای نوع داده بولی است، این نوع داده به راحتی می‌تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد. کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمی‌گردانند؛ بنابراین دستوری مانند (if(a = b باعث بروز خطا می‌شوند.(به جای = بایستی از == استفاده شود)</li>
<li>در سی شارپ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد. بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیر ممکن است. اشاره گر نا امن می‌تواند به نمونه‌ای از value-type، آرایه، رشته یا بلاکی که حافظه به آن داده شده‌است اشاره نماید. کدی که به عنوان نا امن علامت نخورده باشد، هنوز می‌تواند اشاره گرها را از سامانه بازیابی یا در آن ذخیره کند ولی نمی‌تواند مرجع جدیدی به آنها اختصاص دهد.</li>
<li>حافظه ساماندهی شده نمی‌تواند صریحاً آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی می‌شود. انتخاب آدرس‌های به درد نخور حافظه نفوذ ناپذیر است. هم چنین سی شارپ با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می‌کند (پشتیبانی از اصطلاح Resource Acquisition Is Initialization).</li>
<li>وراثت چندگانه از کلاس‌ها در این زبان پشتیبانی نمی‌شود. البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد. پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است. در عوض می‌توان از اینترفیس‌های مختلف استفاده کرد. یعنی برای یک کلاس که احتمالاً فرزند کلاسی دیگر است (ارث برده) می‌توان چندین اینترفیس را پیاده‌سازی (Implement) نمود.</li>
<li><strong class="selflink">سی شارپ</strong> بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می‌پذیرد. هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می‌شود (بایستی به صورت explicit تعریف شود)</li>
<li>اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.</li>
<li>سی شارپ قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول‌های کسول شده در یک کلاس به صورت ویژگی‌ها قرار داده‌است.</li>
</ul>
<p>اکسسورها که خاصیت نیز گفته می‌شوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.</p>
<ul>
<li>تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.</li>
<li>در حال حاضر (۳ ژوئن ۲۰۰۸) دارای ۷۷ کلمه رزرو شده‌است.</li>
</ul>
<h2><span id=".D8.B3.D8.A7.D8.AE.D8.AA.D9.85.D8.A7.D9.86_.D8.AF.D8.A7.D8.AF.D9.87_.28.D8.B3.D8.A7.D8.AE.D8.AA.D8.A7.D8.B1_.D9.88_.D8.B0.D8.AE.DB.8C.D8.B1_.D8.B3.D8.A7.D8.B2.DB.8C_.D8.AF.D8.A7.D8.AF.D9.87.29" class="mw-headline">ساختمان داده (ساختار و ذخیر سازی داده)</span></h2>
<p>این کمپایلر در مقابل C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامه نویس امکان نوشتن برنامه‌های بسیار بهینه را خواهد داد.</p>
<h3><span id=".D8.B1.D8.B4.D8.AA.D9.87.E2.80.8C.D9.87.D8.A7" class="mw-headline">رشته‌ها</span></h3>
<p>در C و یا ++C ساختار رشته به صورت ارایه‌ای از نوع char بود که امکان اضافه کردن به رشته را محدود می‌کرد به دلیل ثابت بودن طول در آغاز تعریف ولی در سی شارپ دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت ارایه‌ای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال می‌دهد؛ ولی در نوع دوم رشته‌ها از لیست پیوندی اسفاده می‌شود.</p>
<h2><span id=".D8.B3.D8.A7.D9.85.D8.A7.D9.86.D9.87_.DB.8C.DA.A9.D9.BE.D8.A7.D8.B1.DA.86.D9.87_.D8.B4.D8.AF.D9.87" class="mw-headline">سامانه یکپارچه شده</span></h2>
<p><strong class="selflink">سی شارپ</strong> دارای یک سامانه نوع یکپارچه‌است که به آن CTS می‌گویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می‌برد. بخاطر کارائی، انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می‌شود.</p>
<h3><span id=".D8.A7.D9.86.D9.88.D8.A7.D8.B9_.D8.AF.D8.A7.D8.AF.D9.87" class="mw-headline">انواع داده</span></h3>
<p>CTS داده‌ها را به دو نوع تقسیم می‌کند:</p>
<ul>
<li>نوع مقداری (Value Type)</li>
<li>نوع مرجعی (Refrence Type)</li>
</ul>
<p>انواع داده‌ای توده ساده‌ای از داده می‌باشند. نمونه‌های انواع داده‌ای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده‌ای، خود مقدار داده‌ها را با یکدیگر مقایسه می‌کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر داده‌های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می‌توانند ایجاد و یا کپی شوند. یکی دیگر از محدودیت‌های انواع داده‌ای این ات که آنها نمی‌توانند از یکدیگر مشتق شوند (ولی می‌توانند اشتراکاتی داشته باشند) و هم چنین نمی‌توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده‌ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می‌باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونه‌ها جدا می‌شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی داده‌های مرجعی است، که در آن آزمایش برای مرجع‌ها از داده‌ای‌ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص می‌توانند این اعمال را از طریق سازنده‌های عمومی یا اجرای واسط‌های مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونه‌هایی از انواع مرجعی، اشیا، System.String و Sysmet.Array می‌باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع داده‌ای را به تابع ای ارسال می‌کنیم، آدرس داده نیز فرستاده می‌شود. البته این امر پیش فرض است ولی برای داده‌های مثل آرایه، رشته‌ای، ادرس فرستاده می‌شود و ارسال از نوع مرجع می‌شود</p>
<h3><span id="Boxing_.D9.88_UnBoxing" class="mw-headline">Boxing و UnBoxing</span></h3>
<p>Boxing عمل تبدیل مقدار نوع داده‌ای به نوع مرجع مشابه آن می‌باشد.</p>
<p>مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span> foo <span class="sy0">=</span> <span class="nu0">42</span><span class="sy0">;</span><span class="co1">// Value type...</span>
<span class="kw4">object</span> bar <span class="sy0">=</span> foo<span class="sy0">;</span><span class="co1">// foo is boxed to bar.</span>
</pre>
</div>
</div>
<p>UnBoxing عمل تبدیل نوع مرجع به نوع داده‌ای می‌باشد. مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span> foo <span class="sy0">=</span> <span class="nu0">42</span><span class="sy0">;</span><span class="co1">// Value type.</span>
<span class="kw4">object</span> bar <span class="sy0">=</span> foo<span class="sy0">;</span><span class="co1">// foo is boxed to bar.</span>
<span class="kw4">int</span> foo2 <span class="sy0">=</span> <span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>bar<span class="sy0">;</span><span class="co1">// Unboxed back to value type.</span>
</pre>
</div>
</div>
<p>سی شارپ به برنامه نویس با استفاده از کلمه کلیدی Struct اجازه می‌دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه‌نویسی، آنها کلاس‌های سبک وزن به نظر می‌رسند. برخلاف کلاس‌ها (که بر روی heap قرار می‌گیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می‌گیرند. آنها همچنین می‌توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به طور معمول برای انواع کلاس تخصیص می‌یابد.</p>
<h2><span id=".D9.88.DB.8C.DA.98.DA.AF.DB.8C.E2.80.8C.D9.87.D8.A7.DB.8C_.D8.AC.D8.AF.DB.8C.D8.AF_.D8.AF.D8.B1_.D8.B3.DB.8C_.D8.B4.D8.A7.D8.B1.D9.BE_.DB.B2.D9.AB.DB.B0" class="mw-headline">ویژگی‌های جدید در سی شارپ ۲٫۰</span></h2>
<p>ویژگی‌های جدید در سی شارپ چارچوب دات‌نت SDK ۲٫۰ (مطابق با سومین ویرایش استاندارد ECMA-۳۳۴):</p>
<h3><span id=".DA.A9.D9.84.D8.A7.D8.B3.D9.87.D8.A7.DB.8C_partial" class="mw-headline">کلاسهای partial</span></h3>
<p>کلاس‌های Partial اجازه اجرای کلاس‌ها از بیش از یک سورس فایل را می‌دهند. این امر اجازه می‌دهد تا کلاس‌های بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمت‌های یک کلاس به طور خودکار تولید می‌شوند مفید است.</p>
<p>file1.cs:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw1">partial</span> <span class="kw4">class</span> MyClass
<span class="br0">{</span>
    <span class="kw1">public</span> MyClass<span class="br0">(</span><span class="br0">)</span>
    <span class="br0">{</span>
<span class="co1">// implementation</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>file2.cs:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw1">partial</span> <span class="kw4">class</span> MyClass
<span class="br0">{</span>
    <span class="kw1">public</span> <span class="kw4">void</span> SomeMethod<span class="br0">(</span><span class="br0">)</span>
    <span class="br0">{</span>
<span class="co1">// implementation</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h3><span id="Generic.D9.87.D8.A7" class="mw-headline">Genericها</span></h3>
<p>genericها یا نوع‌های پارامتری شده یا چندریختی‌های پارامتری یک ویژگی جدید چارچوب دات‌نت ۲٫۰ است که به وسیله سی شارپ پشتیبانی می‌شود. برخلاف Templateهای سی پلاس پلاس، در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می‌گیرد، بنابراین می‌توانند چند زبانه باشند در حالی که ++C نمی‌تواند. آنها دارای ویژگی‌هایی هستند که به طور مستقیم توسطTemplateهای C++ پشتیبانی نمی‌شوند مانند نوع محدودیت‌ها در پارامترهای Generic با استفاده از رابط‌ها(Interface). سی شارپ از پارامترهای‌های Generic بدون نوع پشتیبانی نمی‌کند. بر خلاف genericهای جاوا،genericهای دات نت برای پارامتری کردن انواع داده‌ای در اشیا ماشین مجازی CLI، از مفاهیم شیءگرایی استفاده می‌کنند که اجازه بهینه‌سازی و حفاظت انواع اطلاعات را می‌دهد.</p>
<h3><span id=".DA.A9.D9.84.D8.A7.D8.B3.E2.80.8C.D9.87.D8.A7.DB.8C_static" class="mw-headline">کلاس‌های static</span></h3>
<p>کلاس‌ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آنها Static باشند؛ که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه‌ای است. (زبان رویه‌ای: یک زبان برنامه‌نویسی که در آن عنصر اصلی برنامه‌نویسی یک زیربرنامه‌است. مانند زبانهای C، پاسکال و&#8230;)</p>
<h2><span id=".D9.BE.D8.B1.D9.88.D9.86.D8.AF.D9.87:Imag.7C.D8.A8.D9.86.D8.AF.D8.A7.D9.86.DA.AF.D8.B4.D8.AA.DB.8C.7C.D9.88.D8.B3.D8.B7.7Cslam" class="mw-headline">پرونده:Imag|بندانگشتی|وسط|slam</span></h2>
<p><b>=== یک شکل جدید از تکرار کننده با استفاده از سازنده توابع ===</b> یک شکل جدید از iterator(تکرار کننده)، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="co1">// Method that takes an iterable input (possibly an array) and returns all even numbers.</span>
<span class="kw1">public</span> <span class="kw1">static</span> IEnumerable<span class="sy0">&lt;</span><span class="kw4">int</span><span class="sy0">&gt;</span> GetEven<span class="br0">(</span>IEnumerable<span class="sy0">&lt;</span><span class="kw4">int</span><span class="sy0">&gt;</span> numbers<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">foreach</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="kw1">in</span> numbers<span class="br0">)</span>
    <span class="br0">{</span>
        <span class="kw1">if</span> <span class="br0">(</span>i <span class="sy0">%</span> <span class="nu0">2</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">)</span> <span class="kw1">yield</span> <span class="kw1">return</span> i<span class="sy0">;</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h3><span id="Delegate.D9.87.D8.A7.DB.8C_.D9.86.D8.A7.D8.B4.D9.86.D8.A7.D8.B3" class="mw-headline">Delegateهای ناشناس</span></h3>
<pre> Delegate یک شی می‌باشد که حاوی یک یا چند اشاره گر به توابع می‌باشد؛ که با Invoke کردن آن تمامی توابع اشاره شده داخل آن اجرا می‌شوند.
</pre>
<p>Delegateهای ناشناس که عملکردهای محدودی را در سی شارپ به وجود می‌آورند. کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی‌کند. برای مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span> SumOfArrayElements<span class="br0">(</span><span class="kw4">int</span><span class="br0">[</span><span class="br0">]</span> array<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw4">int</span> sum <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    Array<span class="sy0">.</span><span class="kw1">ForEach</span><span class="br0">(</span>       array,
        <span class="kw4">delegate</span><span class="br0">(</span><span class="kw4">int</span> x<span class="br0">)</span>
        <span class="br0">{</span>
            sum <span class="sy0">+=</span> x<span class="sy0">;</span>
        <span class="br0">}</span>
  <span class="br0">)</span><span class="sy0">;</span>
    <span class="kw1">return</span> sum<span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h3><span id="Delegate_covariance_and_contravariance" class="mw-headline">Delegate covariance and contravariance</span></h3>
<p>تبدیل گروه‌های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند.</p>
<h3><span id=".D8.A7.DA.A9.D8.B3.D8.B3.D9.88.D8.B1.D9.87.D8.A7.DB.8C_.DB.8C.DA.A9_.D8.AE.D8.A7.D8.B5.DB.8C.D8.AA.28get_.D9.88_set.29_.D9.85.DB.8C.E2.80.8C.D8.AA.D9.88.D8.A7.D9.86.D9.86.D8.AF_.D8.AF.D8.A7.D8.B1.D8.A7.DB.8C_.D8.B3.D8.B7.D8.AD_.D8.AF.D8.B3.D8.AA.D8.B1.D8.B3.DB.8C_.D9.85.D8.AA.D9.81.D8.A7.D9.88.D8.AA.DB.8C_.D8.A8.D8.A7.D8.B4.D9.86.D8.AF" class="mw-headline">اکسسورهای یک خاصیت(get و set) می‌توانند دارای سطح دسترسی متفاوتی باشند</span></h3>
<p>مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"> <span class="kw4">string</span> status <span class="sy0">=</span> <span class="kw4">string</span><span class="sy0">.</span><span class="me1">Empty</span><span class="sy0">;</span>
 
<span class="kw1">public</span> <span class="kw4">string</span> Status
<span class="br0">{</span>
    <span class="kw1">get</span> <span class="br0">{</span> <span class="kw1">return</span> status<span class="sy0">;</span> <span class="br0">}</span><span class="co1">// anyone can get value of this property,</span>
    <span class="kw1">protected</span> <span class="kw1">set</span> <span class="br0">{</span> status <span class="sy0">=</span> <span class="kw1">value</span><span class="sy0">;</span> <span class="br0">}</span><span class="co1">// but only derived classes can change it</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>نکته مهم: سطح دسترسی خاصیت نمی‌تواند بالاتر از سطح دسترسی اکسسورها باشد. به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می‌شود.</p>
<h3><span id=".D9.86.D9.88.D8.B9_.D8.AF.D8.A7.D8.AF.D9.87_Nullable" class="mw-headline">نوع داده Nullable</span></h3>
<p>نوع داده Nullable (که با یک علامت سوال قابل تشخیص است: int? i = null;)اجازه تخصیص مقدار null را برای انواع داده‌ای می‌دهد. این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می‌شود. در این حالت نوع ستونی INTEGER NULL در SQL به طور مستقیم به int? در سی شارپ تبدیل می‌شود.</p>
<p>داده‌های Nullable در آخرین لحظات آگوست ۲۰۰۵ اضافه شدند چند هفته مانده به اتمام کار اداری و برای بهبود زبان. متغیر Null در حقیقت خالی نیست، بلکه نمونه‌ای است از struct Nullable&lt;T&gt; با ویژگی HasValue مساوی false. وقتی در برنامه قرار می‌گیرد، خود به خود نمونه خالی در آن قرار می‌گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می‌باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می‌کند:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span><span class="sy0">?</span> i <span class="sy0">=</span> <span class="kw1">null</span><span class="sy0">;</span>
<span class="kw4">object</span> o <span class="sy0">=</span> i<span class="sy0">;</span>
<span class="kw1">if</span> <span class="br0">(</span>o <span class="sy0">==</span> <span class="kw1">null</span><span class="br0">)</span>
    Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span>«Correct behaviour <span class="sy0">-</span> runtime version <span class="kw1">from</span> September <span class="nu0">2005</span> or later»<span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">else</span>
    Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span>«Incorrect behaviour <span class="sy0">-</span> pre<span class="sy0">-</span>release runtime <span class="br0">(</span><span class="kw1">from</span> before September <span class="nu0">2005</span><span class="br0">)</span>»<span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>وقتی درون شی ای کپی می‌شود، نمونه Nullable به صورت تشریفاتی در آن قرار می‌گیرد و در نتیجه مقادیر و منابع Null با هم برابر می‌شوند. در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر چارچوب دات‌نت ۲، به هسته CLR نیز مجهز شد و همه تکنولوژی‌ها نظیر سی شارپ، ویژوال بیسیک، مایکروسافت اس‌کیوال سرور ۲۰۰۵ و مایکروسافت ویژوال استودیو ۲۰۰۵ را شامل شد.</p>
<h3><span id="Coalesce_Operator" class="mw-headline">Coalesce Operator</span></h3>
<p>مقدار اولین عملوندی که null نباشد را برمی‌گرداند. (یا null، برای زمانی که تمام عملوندها null باشند)</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">object</span> nullObj <span class="sy0">=</span> <span class="kw1">null</span><span class="sy0">;</span>
<span class="kw4">object</span> obj <span class="sy0">=</span> <span class="kw3">new</span> <span class="kw4">Object</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">return</span> nullObj <span class="sy0">??</span> obj<span class="sy0">;</span><span class="co1">// returns obj</span>
</pre>
</div>
</div>
<p>کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده‌است.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span><span class="sy0">?</span> i <span class="sy0">=</span> <span class="kw1">null</span><span class="sy0">;</span>
<span class="kw4">int</span> j <span class="sy0">=</span> i <span class="sy0">??</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="coMULTI">/* Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. */</span>
</pre>
</div>
</div>
<h2><span id=".D9.88.DB.8C.DA.98.DA.AF.DB.8C.E2.80.8C.D9.87.D8.A7.DB.8C_.D8.AC.D8.AF.DB.8C.D8.AF_.D8.AF.D8.B1_.D8.B3.DB.8C_.D8.B4.D8.A7.D8.B1.D9.BE_.DB.B3.D9.AB.DB.B0" class="mw-headline">ویژگی‌های جدید در سی شارپ ۳٫۰</span></h2>
<p>این ورژن در تاریخ ۱۹ نوامبر سال ۲۰۰۷ به عنوان بخشی از چارچوب دات‌نت ۳٫۵ عرضه شد؛ که شامل ویژگی‌های جدید الهام شده از زبان‌های برنامه‌نویسی اصلی (Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است. در حال حاضر توسط هیچ موسسه استانداردسازی تائید نشده‌است.</p>
<h3><span id=".D9.85.D8.B9.D8.B1.D9.81.DB.8C_.D9.84.DB.8C.D9.86.DA.A9" class="mw-headline">معرفی لینک</span></h3>
<div class="hatnote relarticle mainarticle">نوشتار اصلی: لینک (زبان برنامه‌نویسی)</div>
<p>لینک (به انگلیسی: <span lang="en" xml:lang="en">Language Integrated Query</span>)(مخفف انگلیسی: <span class="spanen spanen" dir="rtl" lang="en" xml:lang="en"><i>LINQ</i></span>) یک زبان پرس و جوی قابل انعطاف و همه منظوره برای بسیاری از انواع منبع داده‌ها است (مثل انتخاب اشیا شناور، سندهای XML، بانک‌های اطلاعاتی و&#8230;) که در ویژگی‌های سی شارپ ۳ جمع شده‌اند. سینتکس زبان به زحمت از SQL گرفته شده‌است، برای مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span><span class="br0">[</span><span class="br0">]</span> array <span class="sy0">=</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="nu0">5</span>, <span class="nu0">2</span>, <span class="nu0">10</span>, <span class="nu0">7</span> <span class="br0">}</span><span class="sy0">;</span>
 
<span class="co1">// Select squares of all odd numbers in the array sorted in descending order</span>
IEnumerable<span class="sy0">&lt;</span><span class="kw4">int</span><span class="sy0">&gt;</span> query <span class="sy0">=</span> <span class="kw1">from</span> x <span class="kw1">in</span> array
                         <span class="kw1">where</span> x <span class="sy0">%</span> <span class="nu0">2</span> <span class="sy0">==</span> <span class="nu0">1</span>
                         orderby x descending
                         <span class="kw1">select</span> x <span class="sy0">*</span> x<span class="sy0">;</span>
</pre>
</div>
</div>
<h3><span id=".D9.85.D9.82.D8.AF.D8.A7.D8.B1_.D8.AF.D9.87.DB.8C_.D8.A8.D9.87_.D8.A7.D8.B4.DB.8C.D8.A7" class="mw-headline">مقدار دهی به اشیا</span></h3>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Customer c <span class="sy0">=</span> <span class="kw3">new</span> Customer<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span> c<span class="sy0">.</span><span class="me1">Name</span> <span class="sy0">=</span> <span class="st0">"James"</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>عبارت بالا می‌تواند به صورت زیر نوشته شود:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Customer c <span class="sy0">=</span> <span class="kw3">new</span> Customer <span class="br0">{</span> Name<span class="sy0">=</span><span class="st0">"James"</span> <span class="br0">}</span><span class="sy0">;</span>
</pre>
</div>
</div>
<h3><span id=".D9.85.D9.82.D8.AF.D8.A7.D8.B1_.D8.AF.D9.87.DB.8C_Collection" class="mw-headline">مقدار دهی Collection</span></h3>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">MyList list <span class="sy0">=</span> <span class="kw3">new</span> MyList<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
list<span class="sy0">.</span><span class="kw1">Add</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy0">;</span>
list<span class="sy0">.</span><span class="kw1">Add</span><span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>عبارت بالا می‌تواند به صورت زیر نوشته شود:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">MyList list <span class="sy0">=</span> <span class="kw3">new</span> MyList <span class="br0">{</span> <span class="nu0">1</span>, <span class="nu0">2</span> <span class="br0">}</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>فرض کنید که اجزای MyList و System.Collections.IEnumerable دارای متد عمومی Add هستند.</p>
<h3><span id=".D8.A7.D9.86.D9.88.D8.A7.D8.B9_.D8.AF.D8.A7.D8.AF.D9.87.E2.80.8C.D8.A7.DB.8C_.D8.A8.DB.8C_.D9.86.D8.A7.D9.85" class="mw-headline">انواع داده‌ای بی نام</span></h3>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">var</span> x <span class="sy0">=</span> <span class="kw3">new</span> <span class="br0">{</span> FirstName<span class="sy0">=</span><span class="st0">"James"</span>, LastName<span class="sy0">=</span><span class="st0">"Frank"</span> <span class="br0">}</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>سی شارپ ۲٫۰ توابع بی نام را معرفی کرد. سی شارپ ۳٫۰ هم انواع بی نام را معرفی می‌کند. با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند. به نمونه زیر توجه کنید:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">var</span> anonymousType <span class="sy0">=</span> <span class="kw3">new</span> <span class="br0">{</span> Name <span class="sy0">=</span> <span class="kw4">string</span><span class="sy0">.</span><span class="me1">Empty</span>, Age <span class="sy0">=</span> <span class="nu0">0</span> <span class="br0">}</span><span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>کد ارائه شده، یک نوع بی نام را تعریف می‌کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می‌گیرد.</p>
<p>چرا Anonymous types؟ انواع بی نام بهترین گزینه برای تولید Entity Typeها می‌باشند. همانطور که گفته شد Entity Typeها فقط حاوی داده‌ها هستند؛ بنابراین به بهترین نحو می‌توان داده‌های دریافت شده از کاربر را در انواع بی نام بسته بندی کرد.</p>
<h3><span id=".D9.86.D8.AA.DB.8C.D8.AC.D9.87_.D9.86.D9.88.D8.B9_.D9.85.D8.AA.D8.BA.DB.8C.D8.B1_.D9.85.D8.AD.D9.84.DB.8C" class="mw-headline">نتیجه نوع متغیر محلی</span></h3>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">var</span> x <span class="sy0">=</span> <span class="kw3">new</span> Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span><span class="kw4">float</span><span class="sy0">&gt;&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>کد بالا با کد زیر قابل تعویض می‌باشد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span><span class="kw4">float</span><span class="sy0">&gt;&gt;</span> x <span class="sy0">=</span> <span class="kw3">new</span> Dictionary<span class="sy0">&lt;</span><span class="kw4">string</span>, List<span class="sy0">&lt;</span><span class="kw4">float</span><span class="sy0">&gt;&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>این ویژگی تنها یک ntactic sugarراحت برای کوتاه تر بیان کردن متغیرهای محلی نمی‌باشد، بلکه برای تعریف متغیرهای بی نام لازم نیز است.</p>
<h3><span id=".D8.B9.D8.A8.D8.A7.D8.B1.D8.A7.D8.AA_.D9.84.D8.A7.D9.85.D8.A8.D8.AF.D8.A7" class="mw-headline">عبارات لامبدا</span></h3>
<p>عبارات لامبدا یک راه کوتاه برای نوشتن مقادیر توابع بی نام کلاس اول را فراهم می‌کنند. دو مثال زیر را در نظر بگیرید:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">listOfFoo<span class="sy0">.</span><span class="kw1">Where</span><span class="br0">(</span><span class="kw4">delegate</span><span class="br0">(</span>Foo x<span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> x<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">&gt;</span> <span class="nu0">10</span><span class="sy0">;</span> <span class="br0">}</span><span class="br0">)</span>
</pre>
</div>
</div>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">listOfFoo<span class="sy0">.</span><span class="kw1">Where</span><span class="br0">(</span>x <span class="sy0">=&gt;</span> x<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">&gt;</span> <span class="nu0">10</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>در مثال‌های فوق، عبارات لامبدا صرفاً یک نوع سینتکس برای delegateهای بی نام با مقادیر دارای بازگشت هستند. هر چند با توجه به نوع متن استفاده می‌شوند، کامپایلر سی شارپ می‌تواند لامبداها را به ASTها نیز تبدیل کند تا بعداً در زمان اجرا نیز بتوانند پردازش شوند. در مثال فوق، اگر listOfFoo یک مجموعه ساده داخل حافظه نباشد، ولی یک پوشه در اطراف جدول بانک اطلاعاتی می‌باشد. این تکنیک می‌تواند برای بهینه کردن اجرا، برای ترجمه بدنه لامبدا به عبارت معادل آن در SQL استفاده شود. در هر یک از دو راه فوق، خود عبارت لامبدا دقیقاً شبیه کد به نظر می‌رسد، بنابراین روش استفاده در زمان اجرا، برای کاربر ناپیدا می‌باشد.</p>
<p>یکی از ویژگی‌هایی که سی شارپ ۲٫۰ ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی نام (anonymous methods) شناخته می‌شود. توابع بی نام در پاره‌ای مواقع بسیار مفیدند. اما نحو(syntax) به کارگیری آنها دشوار می‌باشد. عبارات لامبدا ویژگی توابع بی نام را دارند اما با نحو ساده‌تری در سی شارپ ۳٫۰ معرفی شده‌اند. به نمونه زیر توجه کنید:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
<span class="br0">{</span>
   <span class="br0">(</span><span class="kw4">int</span> x<span class="br0">)</span> <span class="sy0">=&gt;</span> x <span class="sy0">+</span> <span class="nu0">1</span><span class="sy0">;</span><span class="co1">// explicitly typed parameter</span>
   <span class="br0">(</span>y, z<span class="br0">)</span> <span class="sy0">=&gt;</span> y <span class="sy0">*</span> z<span class="sy0">;</span><span class="co1">// implicitly typed parameter</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می‌کند. همانطور که در کد بالا مشاهده می‌کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان اند. کلمه return به صورت ضمنی حذف شده‌است. تابع معادل عبارت لامبدای اول به صورت زیر است:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">int</span> Fn<span class="br0">(</span><span class="kw4">int</span> x<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">return</span> x<span class="sy0">+</span><span class="nu0">1</span><span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>لیست پارامترها و بدنه عبارت لامبدا توسط =&gt; از هم جدا می‌شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می‌توان بدنه آن را با استفاده از {} نشان داد.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
<span class="br0">{</span>
    <span class="br0">(</span><span class="kw4">int</span> x<span class="br0">)</span> <span class="sy0">=&gt;</span> <span class="br0">{</span> x <span class="sy0">+</span> <span class="nu0">1</span><span class="sy0">;</span> <span class="kw1">return</span> x <span class="sy0">*</span> x<span class="sy0">;</span> <span class="br0">}</span><span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h3><span id=".D8.AE.D9.88.D8.A7.D8.B5_.D8.AE.D9.88.D8.AF.DA.A9.D8.A7.D8.B1" class="mw-headline">خواص خودکار</span></h3>
<p>کامپایلر به طور خودکار یک متغیر نمونه خصوصی و قرار دهنده و قرار گیرنده مناسب تولید می‌کند، مانند:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"> <span class="kw1">public</span> <span class="kw4">string</span> Name <span class="br0">{</span> <span class="kw1">get</span><span class="sy0">;</span> <span class="kw1">private</span> <span class="kw1">set</span><span class="sy0">;</span> <span class="br0">}</span>
</pre>
</div>
</div>
<h3><span id=".D8.AA.D9.88.D8.A7.D8.A8.D8.B9_.D8.A8.D8.B3.D8.B7_.D8.AF.D8.A7.D8.AF.D9.87_.D8.B4.D8.AF.D9.87" class="mw-headline">توابع بسط داده شده</span></h3>
<p>توابع بسط داده شده حالتی از سینتکس Suger هستند که امکان اضافه کردن متد جدید به کلاس موجود را بیرون از حوزه تعریف آن فراهم می‌کنند. در این مثال، تابع بسط داده شده یک تابع ایستا است که قابل فراخوانی توسط تابع مشابه می‌باشد. گیرنده فراخوانی مقید به اولین پارامتر تابع تحت عنوان this می‌باشد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">class</span> StringExtensions
<span class="br0">{</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">string</span> Left<span class="br0">(</span><span class="kw1">this</span> <span class="kw4">string</span> s, <span class="kw4">int</span> n<span class="br0">)</span>
    <span class="br0">{</span>
        <span class="kw1">return</span> s<span class="sy0">.</span><span class="me1">Substring</span><span class="br0">(</span><span class="nu0">0</span>, n<span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span>
<span class="br0">}</span>
 
<span class="kw4">string</span> s <span class="sy0">=</span> <span class="st0">"foo"</span><span class="sy0">;</span>
s<span class="sy0">.</span><span class="me1">Left</span><span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// same as StringExtensions.Left(s, 3);</span>
</pre>
</div>
</div>
<p>زبان <strong class="selflink">سی شارپ</strong> کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیر ممکن می‌شود. سی شارپ ۳٫۰ ویژگی جدیدی را در اختیار برنامه نویسان قرار می‌دهد به این صورت که می‌توان هر نوع کلاسی حتی کلاس‌های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.</p>
<h3><span id=".D8.AA.D9.88.D8.A7.D8.A8.D8.B9_.D8.AC.D8.B2.D8.A6.DB.8C" class="mw-headline">توابع جزئی</span></h3>
<p>توابع جزئی به تولید کننده‌های کد اجازه تولید اعلان توابع به صورت نقاط گسترش یافته‌ای که تنها شامل کدهای اصلی هستند را می‌دهد، در صورتی که یک نفر آن را در قسمتی از کلاسی دیگر اجرا کند.</p>
<h2><span id=".D9.85.D8.AA.D8.BA.DB.8C.D8.B1.D9.87.D8.A7.DB.8C_.D8.B6.D9.85.D9.86.DB.8C_.D9.85.D8.AD.D9.84.DB.8C" class="mw-headline">متغیرهای ضمنی محلی</span></h2>
<p>سی شارپ ۳٫۰ کلمه کلیدی جدید var را معرفی می‌کند که به کمک آن برنامه نویسان قادر خواهند بود متغیرهای محلی خود را بدون ذکر صریح نوع آن‌ها، تعریف کنند.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">namespace</span> CS3_Test
<span class="br0">{</span>
    <span class="kw4">class</span> Program
    <span class="br0">{</span>
        <span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
        <span class="br0">{</span>
            <span class="kw1">var</span> string_value <span class="sy0">=</span> <span class="st0">"Hello C# 3.0"</span><span class="sy0">;</span>
            <span class="kw1">var</span> int_value <span class="sy0">=</span> <span class="nu0">3</span><span class="sy0">;</span>
        <span class="br0">}</span>
    <span class="br0">}</span>
 <span class="br0">}</span>
</pre>
</div>
</div>
<p>یکی از ویژگی‌های اصلی زبان <strong class="selflink">سی شارپ</strong>،Strong Type بودن آن است. Strong Type بودن زبان به این معناست که با اعلان یک متغیر، نوع آن صریحاً باید توسط برنامه نویس مشخص شود. آیا اضافه شدن این ویژگی جدید، منافاتی با Strong Type بودن این زبان دارد؟ در پاسخ باید گفت که تعریف متغیرهای محلی به صورت ضمنی با استفاده از کلمه کلیدی var هیچ گونه منافاتی با Strong Type بودن <strong class="selflink">سی شارپ</strong> ندارد. چون برنامه نویس می‌بایست نوع متغیر را به هنگام اعلان آن صریحاً مشخص کند. نوع متغیر پس از اولین اعلان تا اتمام حوزه تعریف آن تغییر نخواهد کرد و هر گونه تلاش برای تغییر نوع با خطا مواجه خواهد شد؛ بنابراین دو اعلان زیر نامعبر هستند:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">namespace</span> CS3_Test
<span class="br0">{</span>
    <span class="kw4">class</span> Program
    <span class="br0">{</span>
        <span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
        <span class="br0">{</span>
            <span class="kw1">var</span> string_value<span class="sy0">;</span><span class="co1">// Error: Implicitly typed locals must be inintialized</span>
            <span class="kw1">var</span> int_value <span class="sy0">=</span> <span class="kw1">null</span><span class="sy0">;</span> <span class="coMULTI">/* Error: Cannot assign '&lt;null&gt;' to an implicitly typed local */</span>
        <span class="br0">}</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>استفاده از var تنها در تعریف متغیرهای محلی امکانپذیر است. در اعلان متغیرها به صورت سراسری، پارامترهای توابع و مقادیر بازگشتی نمی‌توان از var استفاده کرد. چرا var؟ این ویژگی آزادی عملی بیشتری برای کار با متغیرهای محلی در اختیار برنامه نویس قرار می‌دهد. سناریویی را در نظر بیگیرید که یک تابع تحت شرایطی، مقادیر از انواع مختلف را برگرداند. در این صورت بدون درگیر شدن با casting و تبدیل نوع می‌توان با تعریف متغیر ضمنی محلی هر نوعی را که تابع برمی‌گرداند، در اختیار داشت.</p>
<h2><span id=".D8.B3.D8.A7.D8.B2.D9.86.D8.AF.D9.87.E2.80.8C.D9.87.D8.A7.DB.8C_.D9.BE.DB.8C.D8.B4.D8.B1.D9.81.D8.AA.D9.87" class="mw-headline">سازنده‌های پیشرفته</span></h2>
<p>ماهیت تمامی برنامه‌های امروزی به گونه‌ای‌ست که با حجم عظیمی از داده‌ها سرو کار دارند. برای مدیریت داده‌ها، نیاز به کلاس‌هایی‌ست که در مهندسی نرم‌افزار آنها را Entity Types می‌نامیم. این کلاس‌ها به عنوان بسته‌هایی از داده‌ها محسوب می‌شوند. معضل فعلی موجود در رابطه با Entity Typeها تعدد سازنده‌های آن‌ها می‌باشد و ممکن است شما نیز با این مشکل برخورد کرده باشید. به این صورت که در سناریوهای مختلف، برنامه‌نویسان مجبور هستند سازنده یک کلاس را به چند شکل سربارگذاری کنند. سی شارپ ۳٫۰ راه چاره‌ای فوق‌العاده برای این مشکل ارائه می‌دهد. Object initializer حالت پیشرفته‌ای از سازنده می‌باشد.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">class</span> Person
<span class="br0">{</span>
    <span class="kw1">private</span> <span class="kw4">string</span> firstname<span class="sy0">;</span>
 
    <span class="kw1">public</span> <span class="kw4">string</span> FirstName
    <span class="br0">{</span>
        <span class="kw1">get</span> <span class="br0">{</span> <span class="kw1">return</span> firstname<span class="sy0">;</span> <span class="br0">}</span>
        <span class="kw1">set</span> <span class="br0">{</span> firstname <span class="sy0">=</span> <span class="kw1">value</span><span class="sy0">;</span> <span class="br0">}</span>
    <span class="br0">}</span>
 
    <span class="kw1">private</span> <span class="kw4">string</span> lastname<span class="sy0">;</span>
 
    <span class="kw1">public</span> <span class="kw4">string</span> LastName
    <span class="br0">{</span>
        <span class="kw1">get</span> <span class="br0">{</span> <span class="kw1">return</span> lastname<span class="sy0">;</span> <span class="br0">}</span>
        <span class="kw1">set</span> <span class="br0">{</span> lastname <span class="sy0">=</span> <span class="kw1">value</span><span class="sy0">;</span> <span class="br0">}</span>
    <span class="br0">}</span>
 
    <span class="kw1">private</span> <span class="kw4">int</span> age<span class="sy0">;</span>
 
    <span class="kw1">public</span> <span class="kw4">int</span> Age
    <span class="br0">{</span>
        <span class="kw1">get</span> <span class="br0">{</span> <span class="kw1">return</span> age<span class="sy0">;</span> <span class="br0">}</span>
        <span class="kw1">set</span> <span class="br0">{</span> age <span class="sy0">=</span> <span class="kw1">value</span><span class="sy0">;</span> <span class="br0">}</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>این کلاس شامل سه متغیر بوده و برای هر متغیر خاصیتی تعریف شده‌است. اینک این سوالات مطرح می‌شوند: سازنده این کلاس را به چند شکل باید سربارگذاری کرد؟ سازنده‌ای که هر سه متغیر را مقداردهی کند؟ شاید در مواردی هر سه متغیر در دست نباشد در این صورت چه سازنده‌ای باید فراخوانی شود؟ سی شارپ ۳٫۰ راه حل زیر را ارائه می‌دهد. فرض کنید بخوانیم نمونه‌ای ازکلاس Person را ایجاد کنیم. همانطور که مشاهده می‌کنید، در سی شارپ ۳٫۰ به هنگام نمونه سازی، این امکان در اختیار برنامه نویس قرار می‌گیرد که هر یک از خصیصه‌های موجود در کلاس را به دلخواه و بنا به نیاز مقدار دهی کند به صورت زیر:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Person person <span class="sy0">=</span> <span class="kw3">new</span> Person
<span class="br0">(</span>    Age <span class="sy0">=</span> <span class="nu0">21</span>,
    FirstName <span class="sy0">=</span> <span class="st0">"James"</span>,
    LastName <span class="sy0">=</span> <span class="st0">"Frank"</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<h2><span id=".D8.B9.D8.A8.D8.A7.D8.B1.D8.A7.D8.AA_.D8.AC.D8.B3.D8.AA.D8.AC.D9.88_.28Query_Expression.29" class="mw-headline">عبارات جستجو (Query Expression)</span></h2>
<p>تیم طراح <strong class="selflink">سی شارپ</strong> ویژگی فوق‌العاده‌ای را به آن اضافه کرد که برنامه نویسان را قادر می‌سازد نحو (Syntax) زبان‌های پرس و جو مانند SQL و XQuery را با استفاده از این زبان پیاده‌سازی کنند. این ویژگی با نام اختصاری LINQ شناخته می‌شود و دارای انواع زیر است:</p>
<ul>
<li>LINQ-to-Objects &#8211; talks to in-memory objects</li>
<li>LINQ-to-SQL &#8211; talks to SQL Server databases</li>
<li>LINQ-to-XML &#8211; talks to hierarchical data represented in XML</li>
<li>LINQ-to-DataSets &#8211; talks to DataSet objects and underlying DataTables with their relationships</li>
<li>LINQ-to-Entities &#8211; talks to &#8220;entities&#8221;، part of ADO.NET ۳٫۰</li>
</ul>
<p>نمونه‌ای از کاربرد LINQ به صورت زیر است:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">var</span> int_array <span class="sy0">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">7</span>, <span class="nu0">9</span>, <span class="nu0">12</span> <span class="br0">}</span><span class="sy0">;</span>
 
    <span class="kw1">var</span> selective_array <span class="sy0">=</span> <span class="kw1">from</span> c <span class="kw1">in</span> int_array <span class="kw1">where</span> c<span class="sy0">&gt;</span> <span class="nu0">5</span> <span class="kw1">select</span> c<span class="sy0">;</span>
 
    <span class="kw1">foreach</span> <span class="br0">(</span><span class="kw1">var</span> selected <span class="kw1">in</span> selective_array<span class="br0">)</span>
    <span class="br0">{</span>
        Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span>selected<span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>توضیح: در مثال بالا ابتدا یک آرایهٔ int با مقداردهی اولیه تعریف شده‌است. سپس با استفاده از دستورها) LINQ که جز کلمات کلیدی <strong class="selflink">سی شارپ</strong> محسوب می‌شوند)، آرایه‌ای با اعضای بزرگتر از ۵ انتخاب و در متغیر ضمنی محلی selective_array ذخیره می‌شود. در نهایت اعضای selective_array به صورت ۷ و ۹ و ۱۲ خواهد بود. در توضیح این ویژگی جدید به همین یک مثال بسنده می‌کنیم چون بیان تمامی جنبه‌های LINQ خود نیازمند نگارش مقاله‌ای مفصل می‌باشد.</p>
<h2><span id=".D8.A2.D8.B1.D8.A7.DB.8C.D9.87.E2.80.8C.D9.87.D8.A7.DB.8C_.D9.86.D9.88.D8.B9_.D8.B6.D9.85.D9.86.DB.8C" class="mw-headline">آرایه‌های نوع ضمنی</span></h2>
<p>آرایه‌ها را نیز می‌توان با استفاده از کلمه کلیدی var تعریف کرد.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="kw4">string</span><span class="br0">[</span><span class="br0">]</span> args<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">var</span> a <span class="sy0">=</span> <span class="kw3">new</span><span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="nu0">10</span>, <span class="nu0">100</span>, <span class="nu0">1000</span> <span class="br0">}</span><span class="sy0">;</span><span class="co1">// int[]</span>
    <span class="kw1">var</span> b <span class="sy0">=</span> <span class="kw3">new</span><span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="st0">"one"</span>, <span class="nu0">2</span> <span class="br0">}</span><span class="sy0">;</span><span class="co1">// Error</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h2><span id=".D9.BE.DB.8C.D8.B4_.D9.BE.D8.B1.D8.AF.D8.A7.D8.B2.D9.86.D8.AF.D9.87" class="mw-headline">پیش پردازنده</span></h2>
<p>ویژگی «دستورها پیش پردازنده» <strong class="selflink">سی شارپ</strong>(اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورها پیش پردازنده C است که به برنامه نویس اجازه تعریف سمبلهایی را می‌دهند. برخی از این دستورها عبارتند از: #if، #region، #define. راهنماهایی نظیر #region تذکراتی به ویرایش‌گرها برای code folding می‌دهند.</p>
<h2><span id=".D8.AA.D9.88.D8.B6.DB.8C.D8.AD.D8.A7.D8.AA_.DA.A9.D8.AF" class="mw-headline">توضیحات کد</span></h2>
<p>توضیحات تک خط با استفاده از دو اسلش تعریف می‌شوند(//) و توضیحات چند خطی با /* شروع و به */ ختم می‌شوند.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Foo
<span class="br0">{</span>
<span class="co1">// a comment</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> Bar<span class="br0">(</span><span class="kw4">int</span> firstParam<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span><span class="co1">//Also a comment</span>
<span class="br0">}</span>
 
<span class="kw1">public</span> <span class="kw4">class</span> FooBar
<span class="br0">{</span>
    <span class="coMULTI">/* a comment */</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> BarFoo<span class="br0">(</span><span class="kw4">int</span> firstParam<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>  <span class="coMULTI">/* Also a comment */</span>
</pre>
</div>
</div>
<p>توضیحات چند خطی هم چنین می‌توانند با /* شروع و با */ تمام شوند.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Foo
<span class="br0">{</span>
    <span class="coMULTI">/* A Multi-Line
       comment  */</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> Bar<span class="br0">(</span><span class="kw4">int</span> firstParam<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<h2><span id=".D8.B3.D8.A7.D9.85.D8.A7.D9.86.D9.87_.D9.85.D8.B3.D8.AA.D9.86.D8.AF.D8.B3.D8.A7.D8.B2.DB.8C_XML" class="mw-headline">سامانه مستندسازی XML</span></h2>
<p>سامانه مستندسازی <strong class="selflink">سی شارپ</strong> بسیار شبیه به جاوا است، اما مبنی بر XML. دو شیوه مستندسازی در حال حاضر به وسیله کامپایلر <strong class="selflink">سی شارپ</strong> پشتیبانی می‌شود.</p>
<p>توضیحات تک خطی، که معمولاً در تولید کننده کد Visual Studioپیدا می‌شوند، با استفاده از/// شروع می‌شوند.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Foo
<span class="br0">{</span>
<span class="co1">/// &lt;summary&gt;A summary of the method.&lt;/summary&gt;</span>
<span class="co1">/// &lt;param name="firstParam"&gt;A description of the parameter.&lt;/param&gt;</span>
<span class="co1">/// &lt;remarks&gt;Remarks about the method.&lt;/remarks&gt;</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> Bar<span class="br0">(</span><span class="kw4">int</span> firstParam<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>توضیحات چند خطی، که در نسخه ۱٫۰ تعریف شدند، اما در نسخه ۱٫۱ پشتیبانی از آنها وجود نداشت با /* شروع و به */ ختم می‌شوند:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw4">class</span> Foo
<span class="br0">{</span>
    <span class="coMULTI">/** &lt;summary&gt;A summary of the method.&lt;/summary&gt;
     *  &lt;param name="firstParam"&gt;A description of the parameter.&lt;/param&gt;
     *  &lt;remarks&gt;Remarks about the method.&lt;/remarks&gt; */</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> Bar<span class="br0">(</span><span class="kw4">int</span> firstParam<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>نتکه:در اینجا یک ملاک سخت در مورد استفاده از فضاهای خالی در سندهای XML هنگام استفاده از /**وجود دارد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="coMULTI">/**
 * &lt;summary&gt;
 * A summary of the method.&lt;/summary&gt;*/</span>
</pre>
</div>
</div>
<p>نوع دیگری از کد بالا ارائه خواهد شد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="coMULTI">/**
 * &lt;summary&gt;
   A summary of the method.&lt;/summary&gt;*/</span>
</pre>
</div>
</div>
<p>سینتکس سندسازی توضیحات XML در یک ضمیمه بی قاعده از استاندارد ECMA از سی شارپ وجود دارد. یک استاندارد مشابه قوانینی برای پردازش توضیحات و تبدیل آنها به متون Plain در XML را با کمک قوانین CLI فراهم می‌کند. این به هر IDE در سی شارپ و دیگر ابزار گسترش دهنده امکان پیدا کردن هر نمادی را در کدها می‌دهد.</p>
<h2><span id=".28CLR.28Common_Language_Runtime" class="mw-headline">(CLR(Common Language Runtime</span></h2>
<p>بخش مرکزی چارچوب دات‌نت، محیط اجرایی Runtime می‌باشد که اصطلاحاً به آن CLR یا .NET Runtime می‌گویند. کدهایی که تحت کنترل CLR اجرا می‌شوند اغلب به عنوان کدهای مدیریت شده نامیده می‌شوند.</p>
<p>اگر چه، پیش از این که کدها (همه زبان‌های چارچوب دات‌نت) به وسیله CLR اجرا شوند، بایستی مورد کامپایل قرار گیرند. در چارچوب دات‌نت عمل کامپایل در دو مرحله صورت می‌گیرد:</p>
<ol>
<li>کامپایل سورس کد به MSIL.</li>
<li>کامپایل MSIL به کد مختص پلتفرم به وسیله CLR</li>
</ol>
<p>یک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است. ایدة این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می‌باشد (که به جای متن مبتنی بر کدهای عددی است)، می‌تواند به سرعت به کدهای بومی(Native) ترجمه شود.</p>
<h2><span id=".D8.A8.D8.B1.D8.AE.DB.8C_.D9.88.DB.8C.DA.98.DA.AF.DB.8C.E2.80.8C.D9.87.D8.A7.DB.8C_MSIL" class="mw-headline">برخی ویژگی‌های MSIL</span></h2>
<ul>
<li>شیءگرایی و بکارگیری واسط‌ها</li>
<li>تمایز فراوان بین انواع مقداری و ارجاعی</li>
<li>تعیین Strong Type (این نوع داده دیگر معتبر نیست)</li>
<li>مدیریت خطا از طریق به کارگیری Exception</li>
<li>بکارگیری صفات</li>
</ul>
<h2><span id=".D8.A7.D8.B4.DA.A9.D8.A7.D9.84.D8.A7.D8.AA" class="mw-headline">اشکالات</span></h2>
<h3><span id=".D9.BE.D9.84.D8.AA.D9.81.D8.B1.D9.85" class="mw-headline">پلتفرم</span></h3>
<p>منبع چارچوب دات‌نت مایکروسافت برای اجرا فقط ویندوز است. پیاده‌سازی‌های دیگری برای اجرای برنامه‌های <strong class="selflink">سی شارپ</strong> در ویندوز، لینوکس،BSD یا Mac OS X وجود دارند اما هنوز کامل نیستند: Mono و DotGNU در نوامبر سال ۲۰۰۲ توسط مایکروسافت(نسخه ۱٫۰) برای پیاده‌سازی CLI برای کار در Free BSD و Mac OS X ۱۰٫۲ ارائه شد، اما نسخه‌های بعدی آنها فقط قابل اجرا بر روی ویندوز بود.</p>
<h2><span id=".D9.BE.DB.8C.D8.B4.D8.B1.D9.81.D8.AA_.D8.AF.D8.B1_.D8.A2.DB.8C.D9.86.D8.AF.D9.87" class="mw-headline">پیشرفت در آینده</span></h2>
<p>نسخه بعدی این زبان، سی شارپ ۴ است که از اکتبر سال ۲۰۰۸ در حال ساخته شدن است. ماکروسافت لیستی از ویژگی‌های جدید سی شارپ ۴ را در کنفرانس توسعه دهندگان حرفه‌ای اعلام کرده‌است. تمرکز اصلی در ورژن بعدی روی قابلیت هماهنگی فریم ورک‌ها و نوع زبان‌هایی است که کامال پویا یا قیمتی پویا هستند، مانند dynamic language runtime و COM. ویژگی‌های زیر تا کنون اعلام شده‌اند:</p>
<h3><span id=".D9.BE.D8.A7.D8.B1.D8.A7.D9.85.D8.AA.D8.B1.D9.87.D8.A7.DB.8C_.D9.86.D9.88.D8.B9_generic_.D8.A7.D8.B2_.D9.86.D9.88.D8.B9_Covariant_.D9.88_contravariant" class="mw-headline">پارامترهای نوع generic از نوع Covariant و contravariant</span></h3>
<p>پارامترهای واسط‌های generic و deletageها می‌توانند با استفاده از کلمات out و in از دو نوع Covariant و contravariant باشند. این تعیین نوع‌ها بعداً برای تبدیل انواع به یکدیگر، چه از نوع صریح یا مجازی و چه از نوع compile-time یا run-time به کار می‌رود. به عنوان مثال، واسط IEnumerable&lt;T&gt; در زیر دوباره تعریف شده‌است:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">interface</span> IEnumerable<span class="sy0">&lt;</span><span class="kw1">out</span> T<span class="sy0">&gt;</span>
<span class="br0">{</span>
  IEnumerator<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> GetEnumerator<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>بنابراین، هر کلاس مشتق شده‌ای که از IEnumerable&lt;Derived&gt; استفاه کرده باشد، با تمام کلاس‌های پایه که IEnumerable&lt;Base&gt; را دارند سازگار است. به عنوان تمرین، کد زیر نوشته شده‌است:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">void</span> PrintAll<span class="br0">(</span>IEnumerable<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> objects<span class="br0">)</span>
<span class="br0">{</span>
  <span class="kw1">foreach</span> <span class="br0">(</span><span class="kw4">object</span> o <span class="kw1">in</span> objects<span class="br0">)</span>
  <span class="br0">{</span>
    Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span>o<span class="br0">)</span><span class="sy0">;</span>
  <span class="br0">}</span>
<span class="br0">}</span>
 
IEnumerable<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> strings <span class="sy0">=</span> <span class="kw3">new</span> List<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
PrintAll<span class="br0">(</span>strings<span class="br0">)</span><span class="sy0">;</span><span class="co1">// IEnumerable&lt;string&gt; is implicitly converted to IEnumerable&lt;object&gt;</span>
</pre>
</div>
</div>
<p>برای contravariance، رابط IComparer&lt;T&gt; به صورت زیر دوباره تعریف شده‌است:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">public</span> <span class="kw4">interface</span> IComparer<span class="sy0">&lt;</span><span class="kw1">in</span> T<span class="sy0">&gt;</span>
<span class="br0">{</span>
    <span class="kw4">int</span> Compare<span class="br0">(</span>T x, T y<span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<p>بنابراین، هر کلاسی که IComparer&lt;Base&gt; را برای یک کلاس پایه بیان می‌کند، با IComparer&lt;Derived&gt; در تمام واسط‌ها و کلاس‌هایی که از آن کلاس پایه مشتق شده‌اند، سازگار است. این امر نوشتن کد زیر را میسر می‌سازد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">IComparer<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> objectComparer <span class="sy0">=</span> GetComparer<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
IComparer<span class="sy0">&lt;</span><span class="kw4">string</span><span class="sy0">&gt;</span> stringComparer <span class="sy0">=</span> objectComparer<span class="sy0">;</span>
</pre>
</div>
</div>
<h3><span id=".D8.AC.D8.B3.D8.AA.D8.AC.D9.88.DB.8C_.D8.B9.D8.B6.D9.88_.D9.BE.D9.88.DB.8C.D8.A7" class="mw-headline">جستجوی عضو پویا</span></h3>
<p>در سامانه انواع داده‌های سی شارپ یک نوع جدید با نام شبه-نوع معرفی شده‌است که مانند System.Object رفتار می‌کند، ولی در ادامه، هر دسترسی به اعضا یا برنامه‌هایی که از این نوع استفاده می‌کنند، بدون چک شدن نوع داده‌هایشان اجازه کار دارند و تجزیه آنها تا زمان اجرا به تعویق می‌افتد. به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="co1">// Returns the value of Length property or field of any object</span>
  <span class="kw4">int</span> GetLength<span class="br0">(</span><span class="kw4">dynamic</span> obj<span class="br0">)</span>
  <span class="br0">{</span>
    <span class="kw1">return</span> obj<span class="sy0">.</span><span class="me1">Length</span><span class="sy0">;</span>
  <span class="br0">}</span>
 
  GetLength<span class="br0">(</span>«Hello, world»<span class="br0">)</span><span class="sy0">;</span><span class="co1">// a string has a Length property,</span>
  GetLength<span class="br0">(</span><span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span> <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// and so does an array,</span>
  GetLength<span class="br0">(</span><span class="nu0">42</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// but not an integer - an exception will be thrown here at run-time</span>
</pre>
</div>
</div>
<p>صدا زده شدن‌های متد پویا، مانند پارامترهای صریح یا مجازی با مقدار نوع dynamic راه‌اندازی می‌شوند. به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"> <span class="kw4">void</span> Print<span class="br0">(</span><span class="kw4">dynamic</span> obj<span class="br0">)</span>
  <span class="br0">{</span>
     Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span>obj<span class="br0">)</span><span class="sy0">;</span><span class="co1">// which overload of WriteLine() to call is decided at run-time</span>
  <span class="br0">}</span>
 
  Print<span class="br0">(</span><span class="nu0">123</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// ends up calling WriteLine(int)</span>
  Print<span class="br0">(</span><span class="st0">"abc"</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// ends up calling WriteLine(string)</span>
</pre>
</div>
</div>
<p>جستجوی پویا تحت سه مکانیزم مشخص اجرا می‌شود: COM IDispatch برای اشیا COM، رابط IDynamicObject DLR برای اشیا دارای این واسط و Reflection برای بقیه اشیا؛ بنابراین هر کلاس سی شارپ می‌تواند صدا زده شدن‌های پویای خود را با اجرای IDynamicObject در نمونه‌های خود جدا کند. در مورد متدهای پویا و مشخص کننده صدا زدن‌ها، تجزیه و تحلیل اضافه بار مطابق انواع اصلی که به عنوان آرگومان‌ها هستند، در زمان اجرا اتفاق می‌افتد، در غیر این صورت بر اساس قوانین تجزیه و تحلیل اضافه بار سی شارپ عمل خواهد شد. به علاوه، در مواردی که در صدا زدن پویا، گیرنده خودش پویا نیست، تجزیه و اضافه بار زمان اجرا تنها به متدهایی که در زمان کامپایل به صورت گیرنده ظاهر شده‌اند، رسیدگی می‌کند. به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">class</span> <span class="kw1">Base</span>
<span class="br0">{</span>
  <span class="kw4">void</span> Foo<span class="br0">(</span><span class="kw4">double</span> x<span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
 
<span class="kw4">class</span> Derived<span class="sy0">:</span> <span class="kw1">Base</span>
<span class="br0">{</span>
  <span class="kw4">void</span> Foo<span class="br0">(</span><span class="kw4">int</span> x<span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
 
<span class="kw4">dynamic</span> x <span class="sy0">=</span> <span class="nu0">123</span><span class="sy0">;</span>
<span class="kw1">Base</span> b <span class="sy0">=</span> <span class="kw3">new</span> Derived<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
b<span class="sy0">.</span><span class="me1">Foo</span><span class="br0">(</span>x<span class="br0">)</span><span class="sy0">;</span><span class="co1">// picks Base.Foo(double) because b is of type Base, and Derived.Foo(int) is not exposed</span>
<span class="kw4">dynamic</span> b1 <span class="sy0">=</span> b<span class="sy0">;</span>
b1<span class="sy0">.</span><span class="me1">Foo</span><span class="br0">(</span>x<span class="br0">)</span><span class="sy0">;</span><span class="co1">// picks Derived.Foo(int)</span>
</pre>
</div>
</div>
<p>هر مقداری که توسط دستیابی به عضو پویا برگردانده شده باشد، خودش از نوع پویا است. مقادیر نوع پویا به سایر نوع‌ها و از سایر نوع عا قابل تبدیل هستند. در نمونه کد بالا، این امر به تابع GetLength اجازه با مقدار بازگردانده شده از Length بدون هیچ صریحی به عنوان integer استفاده کند. در زمان اجرا، مقدار واقعی به نوع خواسته شده تبدیل می‌شود.</p>
<h3><span id=".DA.A9.D9.84.D9.85.D9.87_.DA.A9.D9.84.DB.8C.D8.AF.DB.8C_.D8.A7.D8.AE.D8.AA.DB.8C.D8.A7.D8.B1.DB.8C_ref" class="mw-headline">کلمه کلیدی اختیاری ref</span></h3>
<p>در حال حاضر کلمه کلیدی ref برای متدهای صدا زننده اختیاری است. کد زیر را در نظر بگیرید:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">void</span> Increment<span class="br0">(</span><span class="kw1">ref</span> <span class="kw4">int</span> x<span class="br0">)</span>
<span class="br0">{</span>
  <span class="sy0">++</span>x<span class="sy0">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
Increment<span class="br0">(</span><span class="kw1">ref</span> x<span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>به صورت زیر هم می‌تواند نوشته شود:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">void</span> Increment<span class="br0">(</span><span class="kw1">ref</span> <span class="kw4">int</span> x<span class="br0">)</span>
<span class="br0">{</span>
  <span class="sy0">++</span>x<span class="sy0">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
Increment<span class="br0">(</span>x<span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<h3><span id=".D8.A2.D8.B1.DA.AF.D9.88.D9.85.D9.86.D8.AA.E2.80.8C.D9.87.D8.A7.DB.8C_.D9.86.D8.A7.D9.85_.DA.AF.D8.B0.D8.A7.D8.B1.DB.8C_.D8.B4.D8.AF.D9.87_.D9.88_.D9.BE.D8.A7.D8.B1.D8.A7.D9.85.D8.AA.D8.B1.D9.87.D8.A7.DB.8C_.D8.A7.D8.AE.D8.AA.DB.8C.D8.A7.D8.B1.DB.8C" class="mw-headline">آرگومنت‌های نام گذاری شده و پارامترهای اختیاری</span></h3>
<p>در سی شارپ ۴ پارامترهای اختیاری ای با مقادیر پیش فرض موجود در ++C معرفی می‌شوند. به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">void</span> Increment<span class="br0">(</span><span class="kw1">ref</span> <span class="kw4">int</span> x, <span class="kw4">int</span> dx <span class="sy0">=</span> <span class="nu0">1</span><span class="br0">)</span>
<span class="br0">{</span>
  x <span class="sy0">+=</span> dx<span class="sy0">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
Increment<span class="br0">(</span><span class="kw1">ref</span> x<span class="br0">)</span><span class="sy0">;</span><span class="co1">// dx takes the default value of 1</span>
Increment<span class="br0">(</span>x, <span class="nu0">2</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// dx takes the value 2</span>
</pre>
</div>
</div>
<p>به علاوه، برای کامل کردن پارامترهای اختیاری، می‌توانید صریحاً نام پارامترها را در صدازدن‌های متدها تعیین کنید. این کار به شما اجازه تصویب کردن انتخابی برای هر زیر مجموعه اختیاری از پارامترهای متد را می‌دهد. تنها محدودیت موجود این است که پارامترهای نام دار باید بعد از پارامترهای بدون نام بیایند. نام پارامترها می‌توانند برای هر دو نوع پارامترهای اختیاری و ضروری تعیین شوند و می‌توانند برای بهبود خوانایی و فراخوانی دوباره آرگومان‌ها مفید باشند. به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Stream OpenFile<span class="br0">(</span><span class="kw4">string</span> name, FileMode mode <span class="sy0">=</span> FileMode<span class="sy0">.</span><span class="me1">Open</span>, FileAccess access <span class="sy0">=</span> FileAccess<span class="sy0">.</span><span class="me1">Read</span><span class="br0">)</span> <span class="br0">{</span> <span class="sy0">...</span> <span class="br0">}</span>
 
OpenFile<span class="br0">(</span><span class="st0">"file.txt"</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// use default values for both "mode" and "access"</span>
OpenFile<span class="br0">(</span><span class="st0">"file.txt"</span>, mode<span class="sy0">:</span> FileMode<span class="sy0">.</span><span class="me1">Create</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// use default value for "access"</span>
OpenFile<span class="br0">(</span><span class="st0">"file.txt"</span>, access<span class="sy0">:</span> FileAccess<span class="sy0">.</span><span class="me1">Read</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// use default value for "mode"</span>
OpenFile<span class="br0">(</span>name<span class="sy0">:</span> <span class="st0">"file.txt"</span>, access<span class="sy0">:</span> FileAccess<span class="sy0">.</span><span class="me1">Read</span>, mode<span class="sy0">:</span> FileMode<span class="sy0">.</span><span class="me1">Create</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">// name all parameters for extra readability, and use order different from method declaration</span>
</pre>
</div>
</div>
<p>پارامترهای اختیاری inter-operating را با COMراحت تر می‌کنند. در گذشته، سی شارپ مجبور بود تمام پارامترهای متد سازنده COM را پشت سر بگذازد، حتی آنهایی را که اختیاری بودند؛ به عنوان مثال:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">object</span> fileName <span class="sy0">=</span> <span class="st0">"Test.docx"</span><span class="sy0">;</span>
<span class="kw4">object</span> missing <span class="sy0">=</span> <span class="kw5">System.<span class="me1">Reflection</span></span><span class="sy0">.</span><span class="me1">Missing</span><span class="sy0">.</span><span class="kw1">Value</span><span class="sy0">;</span>
 
doc<span class="sy0">.</span><span class="me1">SaveAs</span><span class="br0">(</span><span class="kw1">ref</span> fileName,
    <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing,
    <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing,
    <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing,
    <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing,
    <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing, <span class="kw1">ref</span> missing<span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>با پشتیبانی از پارامترهای اختیاری، کد بالا می‌تواند به صورت زیر خلاصه شود:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">doc<span class="sy0">.</span><span class="me1">SaveAs</span><span class="br0">(</span><span class="st0">"Test.docx"</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<h2><span id=".DA.A9.D8.AA.D8.A7.D8.A8.D8.AE.D8.A7.D9.86.D9.87.E2.80.8C.D9.87.D8.A7" class="mw-headline">کتابخانه‌ها</span></h2>
<p>جزئیات مشخصات سی شارپ، حداقل تعداد نوع‌ها و کتابخانه‌های کلاس است که کامپایلر نیاز به وجود آن‌ها دارد. عملاً، اغلب سی شارپ توسط بیشترین استفاده از CLI را می‌کند، که استاندارد شده ECMA-۳۳۵ است.</p>
<h2><span id=".D9.85.D8.AB.D8.A7.D9.84_Hello_world" class="mw-headline">مثال Hello world</span></h2>
<p>در زیر یک مثال ساده از برنامه سی شارپ آمده‌است، نسخه‌ای از مثال کلاسیک Hello World:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">class</span> ExampleClass
<span class="br0">{</span>
    <span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="br0">)</span>
    <span class="br0">{</span>
        <span class="kw5">System</span><span class="sy0">.</span><span class="me1">Console</span><span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span><span class="st0">"Hello, world!"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span>
<span class="br0">}</span>
</pre>
</div>
</div>
<pre>نتیجه، چاپ شدن متن زیر د خروجی است:
</pre>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Hello, world<span class="sy0">!</span>
</pre>
</div>
</div>
<p>هر خط هدفی دارد:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw4">class</span> ExampleClass
</pre>
</div>
</div>
<p>در بالا، تعریف کلاس آمده‌است. هر چیزی که در بین در علامت پرانتز باشد،ExampleClass را توصیف می‌کند:</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1"><span class="kw1">static</span> <span class="kw4">void</span> Main<span class="br0">(</span><span class="br0">)</span>
</pre>
</div>
</div>
<p>این یک تابه عضو کلاس را در زمان شروع اجرای برنامه اعلان می‌کند. دات نت در زمان اجرا، تابع Main را صدا می‌زند (نکته: Main ممکن است از هر جای دیگری نیز صدا زده شود، مثلاً توسط تابع ExampleClass و با کد ()Main). کلمه کلیدی static تابع را بدون داشتن نمونه‌ای از ExampleClass قابل دسترس می‌کند. هر تابع Main در هر کنسولی باید به صورت static تعریف شود. در غیر این صورت برنامه به یک نمونه نیاز خواهد داشت و هر نمونه به یک برنامه نیاز دارد. برای اجتناب از این وابستگی دایره‌ای تجزیه ناپذیر، کامپایلرهای سی شارپ در صورت Static نبودن تابع Main، یک خطا اعلام می‌کنند. کلمه کلیدی void نشان دهنده این است که تابع Main هیچ مقداری را بر نمی‌گرداند.</p>
<div class="mw-geshi mw-code mw-content-ltr" dir="ltr">
<div class="csharp source-csharp">
<pre class="de1">Console<span class="sy0">.</span><span class="me1">WriteLine</span><span class="br0">(</span><span class="st0">"Hello, world!"</span><span class="br0">)</span><span class="sy0">;</span>
</pre>
</div>
</div>
<p>خط بالا، خروجی را می‌نویسد. در فضای اسم System، Console یک کلاس استاتیک است که یک میانجی بین ورودی، خروجی و خطای کنسول می‌باشد. برنامه‌ای که متدWriteLine را از کنسول صدا می‌زند، خروجی رشته «Hello، world!» را در خروجی نمایش می‌دهد.</p>
<h2><span id=".D8.A7.D8.B3.D8.AA.D8.A7.D9.86.D8.AF.D8.A7.D8.B1.D8.AF.D8.B3.D8.A7.D8.B2.DB.8C" class="mw-headline">استانداردسازی</span></h2>
<p>در آگوست سال ۲۰۰۰، شرکت مایکروسافت، و Hewlett-Packard و شرکت اینتل به عنوان پشتیبان مشخصات سی شارپ را مانند CLI به سازمان استانداردسازی ECMA ارائه کردند. در دسامبر سال ۲۰۰۱، این سازمان، ECMA-۳۳۴ را با عنوان مشخصات زبان سی شارپ منتشر کرد. سی شارپ در سال ۲۰۰۳ به عنوان یک استاندارد ISO به ثبت رسید(ISO/IEC ۲۳۲۷۰). در سال ۲۰۰۲، ECMA دومین ویرایش از خصوصیات زبان سی شارپ را پذیرفت.</p>
<p>در ژوئن سال ۲۰۰۵، ECMA سومین ویرایش را با اضافه کردن مواردی همچون کلاس‌های partial، متدهای ناشناس، انواع nullable و Genericها منتشر کرد. در ژوئیه ۲۰۰۵، ECMA استانداردها و TRها را همراه با پردازش Fast-Track اخیر به ISO/IEC JTC پیشنهاد کرد. این روند معمولاً ۶ تا ۹ ماه زمان می‌برد. آخرین ویرایش این زبان در ۱۵ آگوست سال ۲۰۱۲ در قالب Framework ۴٫۵ارائه گردید</p>
<h2><span id=".DA.A9.D8.A7.D8.B1.D8.A7.D8.A6.DB.8C" class="mw-headline">کارائی</span></h2>
<p>با توجه به توابع موجود در چارچوب دات‌نت امکان استفاده از این توابع وجود دارد که می‌توان گفت برای هر کاری شرکت ماکروسافت تابعی پیش بینی کرده؛ که این امکان را ایجاد می‌کند که به فایل اصلی پروژه هیچ فایل کتابخانی را اضافه نکنید (هم به صورت دستی یا خود کمپایلر). این موضوع خود باعث ایجاد فایل‌های خروجی با حجم بسیار کم می‌شود. این موضوع در بسیاری از موارد بسیار اهمیت دارد. برنامه‌های <strong class="selflink">سی شارپ</strong>، همچون تمام برنامه‌های نوشته شده در چارچوب دات‌نت و سایر محیط‌های ماشینی مجازی مانند جاوا، نیازمند منابع سامانه و حافظه بیشتری نسبت به برنامه‌های نوشته شده با سایر زبان‌ها مانند سی پلاس پلاس است و هم چنین سرعت کمتری نیز دارد. هر چند تعریف زبان سی شارپ و CLI تحت استانداردهای ISO و ECMA استاندارد شده‌اند،CLI تنها قسمتی از Base Class Library (BCL) ماکروسافت می‌باشد که شامل کلاس‌های غیر استاندارد استفاده شده در برنامه‌های سی شارپ نیز می‌شود. از این گذشته، بعضی از قسمت‌های BCL تحت حق امتیاز ماکروسافت هستند که ممکن است پیاده‌سازی کامل framework را مختل کند، زیرا تنها بخش‌های استاندارد دارای حق محافظت RAND در برابر مدعیان را دارند.</p>
<h2><span id=".D9.BE.DB.8C.D8.A7.D8.AF.D9.87.E2.80.8C.D8.B3.D8.A7.D8.B2.DB.8C.E2.80.8C.D9.87.D8.A7" class="mw-headline">پیاده‌سازی‌ها</span></h2>
<p>متداول‌ترین کامپایلر سی شارپ، Microsoft Visual C# می‌باشد.</p>
<dl>
<dt>کامپایلرهای سی شارپ</dt>
</dl>
<ul>
<li>پروژه Microsoft Rotor (در حال حاضر به عنوان Shared Source Common Language Infrastructure شناخته می‌شود) (ثبت شده فقط برای استفاده آموزشی و تحقیقی) یک پیاده‌سازی منبع اشتراکی از CLR Runtime را فراهم می‌آورد و یک کامپایلر <strong class="selflink">سی شارپ</strong>، و یک زیرمجموعه از کتابخانه]] CLI Framework مورد نیاز.</li>
<li>پروژه Mono یک اوپن سورس از کامپایلر سی شارپ است، یک پیاده‌سازی اوپن سورس کامل از CLI شامل کتابخانه‌های Framework مورد نیاز که در ECMA ظاهر شده‌اند، و یک پیاده‌سازی کامل نزدیک به بقیه کتابخانه‌های اختصاصی کلاس چارچوب دات‌نت مایکروسافت.</li>
<li>پروژه DotGNU نیز یک اوپن سورس از کامپایلر سی شارپ است، که پیاده‌سازی آن بسیار نزدیک به Common Language Infrastructure می‌باشد و کتابخانه‌های framework مورد نیاز موجود در ECMA و زیر مجموعه‌ای از کلاس‌های کتابخانه‌ای شخصی ماکروسافت در دات نت و دات نت ۲ را در بر دارد.</li>
</ul>
<p>کاملاً شبیه به پروژه Mono.</p>
<h2><span id=".D9.86.D8.A7.D9.85_.D8.B2.D8.A8.D8.A7.D9.86" class="mw-headline">نام زبان</span></h2>
<p>اسم سی شارپ از علامت موسیقی شارپ گرفته شده‌است که در موسیقی بیان گر این است که متن نوشته شده باید نیم قدم از خط بالاتر باشد. مطابق با ECMA-۳۳۴، بخش ۶، مخفف‌ها و اختصارها، نام زبان به صورت «#C» نوشته می‌شود(«کلمه لاتین C (U+۰۰۴۳) به همراه علامت عددی #(U+۰۰۲۳)») که به صورت «سی شارپ» تلفظ می‌شود. علامت «#» نباید با علامت شارپ در موسیقی(♯، U+۲۶۶F) که در یک صفحه کلید استاندارد وجود ندارد اشتباه گرفته شود. پسوند شارپ، توسط بسیاری دیگر از زبان‌های دات نت مانند #J، #A و #F نیز به کار رفته‌است. پیاده‌سازی اولیه از زبان ایفل تحت دات نت نیز #Eiffel نام داشت که الان زبان ایفل را به طور کامل پشتیبانی می‌کند. هم چنین این پسوند بعضی وقت‌ها در کتابخانه‌ها نیز به کار می‌رود، مانند #Gtk، #Cocoa و #Qt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asiait.ir/%d8%b3%db%8c-%d8%b4%d8%a7%d8%b1%d9%be-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
