تبليغاتX
دانشجویان کامپیوتر دانشگاه آزاد اسلامشهر

دانشجویان کامپیوتر دانشگاه آزاد اسلامشهر
 
مذهبی - آموزش - جزوه دروس - دانلود - تازه ها - ورزشی و...
سی‌شارپ (C#) زبانی شیءگرا و سطح بالا (high level) از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.
اهداف طراحی زبان سی شارپ بر اساس استاندارد ECMA
  • سی شارپ یک زبان برنامه سازی ساده،مدرن،برای اهداف عمومی و شی گرا است.
  • به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره وری برنامه نویس،زبان دارای چک کننده Strong Type ، چک کننده مرزهای آرایه، تشخیص حالتهایی که یک متغیر مقدار دهی اولیه نشده‌است،قابلیت انتقال کدها و Garbage Collection خودکار است.
  • این زبان برای استفاده در اجزای توسعه نرم افزار برای دستیابی به مزایای سیستم‌های توزیعی در نظر گرفته شده‌است.
  • قابلیت انتقال برنامه نویس بسیار مهم است،خصوصاً برای آن دسته از برنامه نویسانی که با زبان‌های C و C++ آشنا هستند.
  • زبان سی شارپ برای نوشتن برنامه‌ها برای سیستمهای تعبیه شده و میزبان در نظر گرفته شده‌است.
تاریخچه معماری

در سال 1999 آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود.در ارائه و معرفی رسمی .NET در PDC در سال 2000 این زبان به Cسی شارپ تغییر نام یافت.تجربه قبلی هلزبرگ در طراحی Framework و زبان‌های برنامه سازی (Borland Delphi, Turbo Pascal, Visual J++)به آسانی در دستورالعمل‌های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.

نام

مطابق با ECMA-334،بخش 6، مخفف‌ها و اختصارها ، نام زبان به صورت «#C» نوشته می‌شود(«کلمه لاتین C (U+0043) به همراه علامت عددی #(U+0023)») که به صورت «سی شارپ» تلفظ می‌شود.علامت «#» نباید با علامت شارپ در موسیقی(♯ , U+266F) که در یک صفحه کلید استاندارد وجود ندارد اشتباه گرفته شود.



استانداردسازی

در آگوست سال 2000 ، شرکت مایکروسافت،و Hewlett-Packard و شرکت Intel به عنوان پشتیبان مشخصات سی شارپ را به سازمان استانداردسازی ECMA ارائه کردند.در دسامبر سال 2001 ، این سازمان ، ECMA-334 را با عنوان مشخصات زبان سی شارپ منتشر کرد.سی شارپ در سال 2003 به عنوان یک استاندارد ISO به ثبت رسید(ISO/IEC 23270) .
در سال 2002، ECMA دومین ویرایش از خصوصیات زبان سی شارپ و در ژوئن سال 2005 ، سومین ویرایش را با اضافه کردن مواردی همچون کلاس‌های partial ، متدهای ناشناس ، انواع nullable و Genericها منتشر کرد. آخرین ویرایش این زبان در 19 نوامبر سال 2007 در قالب Framework3.5ارائه گردید

Common Language Runtime (CLR)

بخش مرکزی .NET Framework ، محیط اجرایی Runtime می‌باشد که اصطلاحاً به آن CLR یا .NET Runtime می‌گویند.کدهایی که تحت کنترل CLR اجرا می‌شوند اغلب به عنوان کدهای مدیریت شده نامیده می‌شوند.
اگر چه،پیش از این که کدها(همه زبان‌های .NET ) به وسیله CLR اجرا شوند،بایستی مورد کامپایل قرار گیرند.در .NET عمل کامپایل در دو مرحله صورت می‌گیرد:
1) کامپایل سورس کد به MSIL.
2) کامپایل MSIL به کد مختص پلتفرم به وسیله CLR

یک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است.ایدة این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می‌باشد(که به جای متن مبتنی بر کدهای عددی است) ،می تواند به سرعت به کدهای بومی(Native) ترجمه شود.

برخی ویژگی‌های MSIL

شی گرایی و بکارگیری واسط‌ها
 تمایز فراوان بین انواع مقداری و ارجاعی
 تعیین Strong Type(نوع داده Variantدیگر معتبر نیست)
 مدیریت خطا از طریق به کارگیری Exceptio
 بکارگیری صفات

ویژگی‌های زبان سی شارپ

ابتدا به برخی از تفاوت‌های زبان سی شارپ با C و سی پلاس پلاس می‌پردازیم:
 هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند.
سی شارپ دارای یک نوع داده بولی است (bool).برخی از عبارت‌ها مانند while و if نیازمند یک عبارت نوع بولی هستند.این نوع داده به راحتی میتواند به یا از Integerها تبدیل شود، و عبارتی مانند if(a) نیازمند این امر است که a از یک نوع قابل تبدیل به bool باشد.کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمیگردانند.بنابراین دستوری مانند if(a = b) باعث بروز خطا می‌شوند.(به جای = بایستی از == استفاده شود)
 در سی شارپ ، اشاره گرها بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد.
 این زبان دارای Garbage Collection خودکار است و در کلاس‌ها به جز موارد خاص نیازی به نوشتن مخرب‌ها نیست.
وراثت چندگانه از کلاس‌ها در این زبان بر خلاف سی پلاس پلاس پشتیبانی نمی‌شود.البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد.پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان و برای جلوگیری از پیچیدگی است.
سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می‌پذیرد.هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می‌شود(بایستی به صورت explicit تعریف شود)
 Enumerationها در داخل namespaceها قرار گرفته‌اند.
 اکسسورها که خاصیت نیز گفته می‌شوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.
 تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.

سیستم یکپارچه شده

سی شارپ دارای یک سیستم نوع یکپارچه‌است.این بدان معناست که تمام انواع،شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند.به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می‌برد.بخاطر کارائی،انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می‌شود.Boxing و Unboxing این امکان را می‌دهد تا داده‌های اولیه به یا از حالت اشیاء تبدیل شوند.بطور مؤثر،این امر انواع اولیه را یک زیر نوع از نوع Object می‌کند.
سی شارپ به برنامه نویس با استفاده از کلمه کلیدی Struct اجازه می‌دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه نویسی، آنها کلاس‌های سبک وزن به نظر می‌رسند. برخلاف کلاس‌ها (که بر روی heap قرار میگیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می‌گیرند.آنها همچنین می‌توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به طور معمول برای انواع کلاس تخصیص می‌یابد.

ویژگی‌های جدید در C# 2.0

ویژگی‌های جدید در C# .NET SDK 2.0 (مطابق با سومین ویرایش استاندارد ECMA-334):
 کلاس‌های Partial اجازة اجرای کلاس‌ها از بیش از یک سورس فایل را می‌دهند.این امر اجازه می‌دهد تا کلاس‌های بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمت‌های یک کلاس به طور خودکار تولید می‌شوند مفید است.
file1.cs:
public partial class MyClass
{
public MyClass()
{
// implementation
}
}
file2.cs:
public partial class MyClass
{
public void SomeMethod()
{
// implementation
}
}



 Generic‌ها . این یک ویژگی جدید .NET 2.0 است که به وسیله سی شارپ پشتیبانی می‌شود.برخلاف Template‌های سی پلاس پلاس،در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می‌گیرد.آنها دارای ویژگی‌هایی هستند که به طور مستقیم توسطTemplate‌های C++ پشتیبانی نمی‌شوند مانند نوع محدودیت‌ها در پارامترهای Generic با استفاده از رابط ها(Interface). سی شارپ از پارامترهای‌های Generic بدون نوع پشتیبانی نمی‌کند.
 کلاس‌ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آنها Static باشند.که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه‌ای است.(زبان رویه‌ای : یک زبان برنامه نویسی که در آن عنصر اصلی برنامه نویسی یک زیربرنامه‌است.مانند زبانهای C، پاسکال و...)
 یک شکل جدید از iterator(تکرار کننده) ، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.

// Method that takes an iterable input (possibly an array) and returns all even numbers.
public static IEnumerable GetEven(IEnumerable numbers)
{
foreach (int i in numbers)
{
if (i % 2 == 0) yield return i;
}
}

 Delegate‌های ناشناس که عملکردهای محدودی را به وجود می‌آورند.
public void Foo(object parameter) {
// ...

ThreadPool.QueueUserWorkItem(delegate
{
// anonymous delegates have full access to local variables of the enclosing method
if (parameter == ...)
{
// ...
}

// ...
});
}


 اکسسورهای یک خاصیت(get و set) می‌توانند دارای سطح دسترسی متفاوتی باشند.
string status = string.Empty;

public string Status
{
get { return status; } // anyone can get value of this property,
protected set { status = value; } // but only derived classes can change it
}

نکته مهم : سطح دسترسی خاصیت نمی‌تواند بالاتر از سطح دسترسی اکسسورها باشد.به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می‌شود.
 نوع مقداری Nullable (که با یک علامت سوال قابل تشخیص است : int? i = nullاجازه تخصیص مقدار null را برای انواع داده‌ای می‌دهد.این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می‌شود. در این حالت نوع ستونی INTEGER NULL در SQL به طور مستقیم به int? در سی شارپ تبدیل می‌شود.


int? i = null;
object o = i;
if (o == null)
Console.WriteLine(«Correct behaviour - runtime version from September 2005 or later»);
else
Console.WriteLine(«Incorrect behaviour - pre-release runtime (from before September 2005)»);
 Coalesce Operator (??):که مقدار اولین عملوندی که null نباشد را برمی گرداند.(یا null،برای زمانی که تمام عملوندها null باشند)
object nullObj = null;
object obj = new Object();
return nullObj ?? obj; // returns obj
کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده‌است.
int? i = null;
int j = i ?? 0; /* Unless i is null, initialize j to i. Else (if i is null), initialize j to 0.*/



ویژگی‌های جدید در C# 3.0

این ورژن در تاریخ 19 نوامبر سال 2007 به عنوان بخشی از .NET Framework 3.5 عرضه شد.که شامل ویژگی‌های جدید الهام شده از زبان‌های برنامه نویسی اصلی(Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است.
متغیرهای ضمنی محلی : C# 3.0 کلمه کلیدی جدید var را معرفی می کند که به کمک آن برنامه نویسان قادر خواهند بود متغیرهای محلی خود را بدون ذکر صریح نوع آن‌ها، تعریف کنند.
namespace CS3_Test
{
class Program
{
static void Main(string[] args)
{
var string_value = «Hello C# 3.0»;
var int_value = 3;
}
}
{

یکی از ویژگی های اصلی زبان سی شارپ،Strong Type بودن آن است. Strong Type بودن زبان به این معناست که با اعلان یک متغیر، نوع آن صریحا باید توسط برنامه نویس مشخص شود. آیا اضافه شدن این ویژگی جدید، منافاتی با Strong Type بودن این زبان دارد؟در پاسخ باید گفت که تعریف متغیرهای محلی به صورت ضمنی با استفاده از کلمه کلیدی var هیچ گونه منافاتی با Strong Type بودن سی شارپ ندارد. چون برنامه نویس می بایست نوع متغیر را به هنگام اعلان آن صریحا مشخص کند.نوع متغیر پس از اولین اعلان تا اتمام حوزه تعریف آن تغییر نخواهد کرد و هر گونه تلاش برای تغییر نوع با خطا مواجه خواهد شد.بنابراین دو اعلان زیر نامعبر هستند:
namespace CS3_Test
{
class Program
{
static void Main(string[] args)
{
var string_value; // Error : Implicitly typed locals must be inintialized
var int_value = null; /* Error : Cannot assign '' to an implicitly typed local */
}
}
}

استفاده از var تنها در تعریف متغیرهای محلی امکانپذیر است. در اعلان متغیرها به صورت سراسری، پارامترهای توابع و مقادیر بازگشتی نمی توان از var استفاده کرد. چرا var ؟ این ویژگی آزادی عملی بیشتری برای کار با متغیرهای محلی در اختیار برنامه نویس قرار می دهد. سناریویی را در نظر بیگیرید که یک تابع تحت شرایطی، مقادیر از انواع مختلف را برگرداند. در این صورت بدون درگیر شدن با casting و تبدیل نوع می توان با تعریف متغیر ضمنی محلی هر نوعی را که تابع برمی گرداند، در اختیار داشت.
توابع بسط داده شده (Extention Methods): زبان سی شارپ کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیر ممکن می شود. C# 3.0 ویژگی جدیدی را در اختیار برنامه نویسان قرار می دهد به این صورت که می توان هر نوع کلاسی حتی کلاس های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.
عبارات لامبدا : یکی از ویژگی هایی کهC# 2.0 ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی نام (anonymous methods) شناخته می شود. توابع بی نام در پاره ای مواقع بسیار مفیدند. اما نحو(syntax) به کارگیری آنها دشوار می باشد. عبارات لامبدا ویژگی توابع بی نام را دارند اما با نحو ساده تری در C# 3.0معرفی شده‌اند.به نمونه زیر توجه کنید:
static void Main(string[] args)
{
(int x) => x + 1; // explicitly typed parameter
(y, z) => y * z; // implicitly typed parameter
}

تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می کند. همانطور که در کد بالا مشاهده می کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان اند. کلمه return به صورت ضمنی حذف شده‌است. تابع معادل عبارت لامبدای اول به صورت زیر است:
int Fn(int x)
{
return x+1;
}
لیست پارامترها و بدنه عبارت لامبدا توسط => از هم جدا می شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می توان بدنه آن را با استفاده از {} نشان داد.
static void Main(string[] args)
{
(int x) => { x + 1; return x * x; };
}

سازنده‌های پیشرفته : ماهیت تمامی برنامه های امروزی به گونه ای ست که با حجم عظیمی از داده‌ها سرو کار دارند.برای مدیریت داده‌ها، نیاز به کلاس هایی ست که در مهندسی نرم افزار آنها را Entity Types می نامیم.این کلاس‌ها به عنوان بسته هایی از داده‌ها محسوب می شوند.معضل فعلی موجود در رابطه با Entity Typeها تعدد سازنده های آن‌ها می باشد و ممکن است شما نیز با این مشکل برخورد کرده باشید.به این صورت که در سناریوهای مختلف، برنامه نویسان مجبور هستند سازنده یک کلاس را به چند شکل سربارگذاری کنند.C# 3.0 راه چاره ای فوق العاده برای این مشکل ارائه می دهد. Object initializer حالت پیشرفته ای از سازنده می باشد.
class Person
{
private string firstname;

public string FirstName
{
get { return firstname; }
set { firstname = value; }
}

private string lastname;

public string LastName
{
get { return lastname; }
set { lastname = value; }
}

private int age;

public int Age
{
get { return age; }
set { age = value; }
}
}

این کلاس شامل سه متغیر بوده و برای هر متغیر خاصیتی تعریف شده‌است.اینک این سوالات مطرح می شوند : سازنده این کلاس را به چند شکل باید سربارگذاری کرد؟ سازنده ای که هر سه متغیر را مقداردهی کند؟ شاید در مواردی هر سه متغیر در دست نباشد در این صورت چه سازنده ای باید فراخوانی شود؟ C# 3.0 راه حل زیر را ارائه می دهد.فرض کنید بخوانیم نمونه ای ازکلاس Person را ایجاد کنیم. همانطور که مشاهده می کنید،در C# 3.0 به هنگام نمونه سازی، این امکان در اختیار برنامه نویس قرار می گیرد که هر یک از خصیصه های موجود در کلاس را به دلخواه و بنا به نیاز مقدار دهی کند به صورت زیر :
Person person = new Person
{
Age = 21,
FirstName = «Mohamad Sadegh»,
LastName = "Mozafari"
};
نوع‌های بی نام : C# 2.0توابع بی نام را معرفی کرد. C# 3.0هم انواع بی نام را معرفی می کند.با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند.به نمونه زیر توجه کنید:
static void Main(string[] args)
{
var anonymousType = new { Name = string.Empty, Age = 0 };
}

کد ارائه شده، یک نوع بی نام را تعریف می کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می گیرد.
چرا Anonymous types؟ انواع بی نام بهترین گزینه برای تولید Entity Typeها می باشند.همانطور که گفته شد Entity Typeها فقط حاوی داده‌ها هستند.بنابراین به بهترین نحو می توان داده های دریافت شده از کاربر را در انواع بی نام بسته بندی کرد.
عبارات جست و جو (Query Expression) : تیم طراح سی شارپ ویژگی فوق العاده ای را به آن اضافه کرد که برنامه نویسان را قادر می سازد نحو (Syntax) زبان های پرس و جو مانند SQL و XQuery را با استفاده از این زبان پیاده سازی کنند. این ویژگی با نام اختصاری LINQ شناخته می شود و دارای انواع زیر است:
§ LINQ-to-Objects - talks to in-memory objects
§ LINQ-to-SQL - talks to SQL Server databases
§ LINQ-to-XML - talks to hierarchical data represented in XML
§ LINQ-to-DataSets - talks to DataSet objects and underlying DataTables with their relationships

§ LINQ-to-Entities - talks to "entities", part of ADO.NET 3.0
نمونه‌ای از کاربرد LINQ به صورت زیر است:
static void Main(string[] args)
{
var int_array = new int[] { 1, 2, 7, 9, 12 };

var selective_array = from c in int_array where c > 0 select c;

foreach (var selected in selective_array)
{
Console.WriteLine(selected);
{
}

توضیح : در مثال بالا ابتدا یک آرایهٔ int با مقداردهی اولیه تعریف شده‌است.سپس با استفاده از دستورات) LINQ که جز کلمات کلیدی سی شارپ محسوب می شوند)، آرایه ای با اعضای بزرگتر از 5 انتخاب و در متغیر ضمنی محلی selective_array ذخیره می شود.در نهایت اعضای selective_array به صورت 7 و 9 و 12 خواهد بود.در توضیح این ویژگی جدید به همین یک مثال بسنده می کنیم چون بیان تمامی جنبه های LINQ خود نیازمند نگارش مقاله ای مفصل می باشد.
 آرایه‌های نوع ضمنی :آرایه‌ها را نیز می‌توان با استفاده از کلمه کلیدی var تعریف کرد.
static void Main(string[] args)
{
var a = new[] { 1, 10, 100, 1000 }; // int[]
var b = new[] { 1, "one", 2 }; // Error
}



پیش پردازنده

ویژگی «دستورات پیش پردازنده» سی شارپ(اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورات پیش پردازنده C است که به برنامه نویس اجازه تعریف سمبلهایی را می‌دهند.برخی از این دستورات عبارتند از : #if ، #region ، #define .

توضیحات کد

توضیحات تک خط با استفاده از دو اسلش تعریف می‌شوند(//) و توضیحات چند خطی با /* شروع و به */ ختم می‌شوند.





سیستم مستند سازی XML

سیستم مستند سازی سی شارپ بسیار شبیه به جاوا است ، اما مبنی بر XML. دو شیوه مستند سازی در حال حاضر به وسیله کامپایلر سی شارپ پشتیبانی می‌شود.
توضیحات تک خطی، با استفاده از /// شروع می‌شوند.


توضیحات چند خطی،که در نسخه 1.0 تعریف شدند ،اما در نسخه 1.1 پشتیبانی از آنها وجود نداشت با /* شروع و به */ ختم می‌شوند:

اشکالات


کارائی

برنامه‌های سی شارپ ، همچون تمام برنامه‌های نوشته شده در .NET و سایر محیط‌های ماشینی مجازی مانند جاوا ، نیازمند منابع سیستم بیشتری نسبت به برنامه‌های نوشته شده با سایر زبان‌ها است.

پلتفورم

منبع .NET مایکروسافت برای اجرا فقط ویندوز است .پیاده سازی‌های دیگری برای اجرای برنامه‌های سی شارپ در ویندوز، لینوکس،BSD یا Mac OS X[[]] وجود دارند اما هنوز کامل نیستند : Mono و DotGNU در نوامبر سال 2002 توسط مایکروسافت(نسخه 1.0) برای پیاده سازی CLI برای کار در Free BSD و Mac OS X 10.2 ارائه شد ، اما نسخه‌های بعدی آنها فقط قابل اجرا بر روی ویندوز بود.



مجوز (Licensing)

اگرچه زبان سی شارپ تحت استاندارد ISO، استانداردسازی شده‌است، تنها بخشی از کتابخانه کلاس پایه،که حاوی عملکردهای بنیادی که در تمام برنامه‌های سی شارپ استفاده می‌شوند(IO, User Interface, Web Services , …) استاندارد سازی شده‌است.





پیاده سازی ها

کامپایلرهای C# :
 پروژه Microsoft Rotor (در حال حاضر به عنوان Shared Source Common Language Infrastructure شناخته می‌شود) (ثبت شده فقط برای استفاده آموزشی و تحقیقی) یک پیاده سازی منبع اشتراکی از CLR Runtime را فراهم می‌آورد و یک کامپایلر سی شارپ، و یک زیرمجموعه از کتابخانه]] CLI Framework مورد نیاز.
 پروژه Mono یک اوپن سورس از کامپایلر سی شارپ است،یک پیاده سازی اوپن سورس کامل از CLI شامل کتابخانه‌های Framework مورد نیاز که در ECMA ظاهر شده‌اند، و یک پیاده سازی کامل نزدیک به بقیه کتابخانه‌های اختصاصی کلاس .NET مایکروسافت.
 پروژه DotGNU نیز یک اوپن سورس از کامپایلر سی شارپ است.کاملاً شبیه به پروژه Mono .



کلمات اختصاری به کار رفته در این متن

PDC: Professional Developers Conference
IL (MSIL): Microsoft Intermediate Language
ECMA: European Computer Manufacturers Association
BCL: Base Class Library
CLI: Common Language Infrastructure
CLS: Common Language Specification
IEC: International Electrotechnical Commission
ISO: International Organization for Standardization
SDK: Software Development Kit
LINQ: Language Integrated Query
ادامه مطلب


نوشته شده در تاريخ چهارشنبه بیست و هفتم آذر 1387 توسط مدیر : شاهین نعمتی
درباره وبلاگ

این وبلاگ به عنوان یک وبلاگ گروهی توسط چند تن از دانشجویان رشته کامپیوتر دانشگاه آزاد واحد اسلامشهر تاسیس شده است
sh.nemati68@yahoo.com