|
Article on other languages:
|
عنوان درست این صفحه C# (programming language) می باشد ولی به دلیل قیود تکنیکی بهاز آوردن علامت # صرف نظر شده است. سیشارپ (C#) زبانی شیءگرا و سطح بالا (high level) از خانوادهٔ زبانهای چارچوب داتنت شرکت مایکروسافت است. زبان #C، یک زبان برنامه نویسی چند الگویی است و منظم شده مدل های تابعی، امری، عمومی، شی گرا و جز گرا می باشد. این زبان توسط ماکروسافت و جزئی از دات نت به وجود آمد و بعدا استانداردهای ECMAو ISO را نیز در بر گرفت. #C یکی از 44 زبان برنامه نویسی ای است که توسط Common Language Runtime از .NET Framework پشتیبانی می شوند و در همه جا به وسیله Microsoft Visual Studio شناخته می شود. این زبان برپایه سادگی، مدرن بودن، همه منظوره و شی گرا بودن ساخته شد.Anders Hejlsberg، طراح زبان برنامه نویسی دلفی، سرپرستی تیم طراحان زبان #C را بر عهده داشت.این زبان دارای دستوری شی گرا مشابه ++C است و به شدت از زبان های جاوا و دلفی تاثیر پذیرفته است.در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در جولای 2000، زمانی که ماکروسافت پروژه را عمومی اعلام کرد، اسم آن به #C تغییر پیدا کرد.آخرین نسخه آن نسخه 3 است که از ویژوال استدیو 2008 استفاده می کند. نسخه بعدی 4 است که در دست ساخت است. اهداف طراحی زبان
تاریخچهدر سال 1999، شرکت سان اجازه استفاده از زبان برنامه نویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستم عامل خود از آن استفاده کند.جاوا در اصل به هیچ پلت فرم یا سیستم عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم عامل بودن جاوا را از آن برداشت.شرکت سان پرونده ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شی گرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس های کتابخانه ای با زبان و کامپایلر SMC نوشته شدند.در سال 1999 آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شی گرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی .NET در PDC در سال 2000 این زبان به Cسی شارپ تغییر نام یافت و کتابخانه کلاس ها و runtime در ASP.NET به#C منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبانهای برنامه سازی++Borland , Delphi, Turbo Pascal, Visual C به آسانی در دستورالعملهای سی شارپ قابل رویت است و به همان خوبی در هسته CLR. ویژگیهابرخی از تفاوتهای زبان سی شارپ با C و ++C عبارتند از:
اکسسورها که خاصیت نیز گفته میشوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی دادهها هستند.
سیستم یکپارچه شدهسی شارپ دارای یک سیستم نوع یکپارچهاست که به آن CTS می گویند.این بدان معناست که تمام انواع،شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند.به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث میبرد.بخاطر کارائی،انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته میشود. انواع دادهCTS داده ها را به دو نوع تقسیم می کند:
انواع داده ای توده ساده ای از داده می باشند.نمونه های انواع داده ای نه حویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده ای، خود مقدار داده ها را با یکدیگر مقایسه می کنیم مگر اینکه عملگر های مشابه دوباره تعریف شده باشند.مقادیر داده های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می توانند ایجاد و یا کپی شوند.یکی دیگر از محدودیت های انواع داده ای این ات که آنها نمی توانند از یکدیگر مشتق شوند(ولی میتوانند اشتراکاتی داشته باشند) و هم چنین نمی توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند( که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونه ها جدا می شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقا نمونه مشابه مقایسه تساوی یا عدم تساوی داده های مرجعی است، که در آن آزمایش برای مرجع ها از داده ای ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه.ولی به هر حال انواع مرجعی خاص می توانند این اعمال را از طریق سازنده های عمومی یا اجرای واسط های مشابه(مثل ICloneable یا IComparable) انجام دهند.نمونه هایی از انواع مرجعی، اشیا، System.Stringو Sysmet.Array می باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. Boxing عمل تبدیل مقدار نوع داده ای به نوع مرجع مشابه آن می باشد. مثال: int foo = 42; // Value type... object bar = foo; // foo is boxed to bar. UnBoxing عمل تبدیل نوع مرجع به نوع داده ای می باشد. مثال: int foo = 42; // Value type. object bar = foo; // foo is boxed to bar. int foo2 = (int)bar; // Unboxed back to value type. سی شارپ به برنامه نویس با استفاده از کلمه کلیدی Struct اجازه میدهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه نویسی، آنها کلاسهای سبک وزن به نظر میرسند. برخلاف کلاسها (که بر روی heap قرار میگیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار میگیرند.آنها همچنین میتوانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به طور معمول برای انواع کلاس تخصیص مییابد. ویژگیهای جدید در C# 2.0ویژگیهای جدید در C# .NET SDK 2.0 (مطابق با سومین ویرایش استاندارد ECMA-334): کلاسهای partialکلاسهای Partial اجازه اجرای کلاسها از بیش از یک سورس فایل را میدهند.این امر اجازه میدهد تا کلاسهای بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمتهای یک کلاس به طور خودکار تولید میشوند مفید است. file1.cs: public partial class MyClass { public MyClass() { // implementation } } file2.cs: public partial class MyClass { public void SomeMethod() { // implementation } } Genericهاgenericها یا نوع های پارامتری شده یا چندریختی های پارامتری یک ویژگی جدید .NET 2.0 است که به وسیله سی شارپ پشتیبانی میشود.برخلاف Templateهای سی پلاس پلاس،در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت میگیرد، بنابراین می توانند چند زبلنه باشند در حالی که ++C نمی تواند.آنها دارای ویژگیهایی هستند که به طور مستقیم توسطTemplateهای C++ پشتیبانی نمیشوند مانند نوع محدودیتها در پارامترهای Generic با استفاده از رابط ها(Interface). سی شارپ از پارامترهایهای Generic بدون نوع پشتیبانی نمیکند.بر خلاف genericهای جاوا،genericهای دات نت برای پارامتری کردن انواع داده ای در اشیا ماشین مجازی CLI، از مفاهیم شی گرایی استفاده می کنند که اجازه بهینه سازی و حفاظت انواع اطلاعات را می دهد. کلاس های staticکلاسها به صورت 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<int> GetEven(IEnumerable<int> numbers) { foreach (int i in numbers) { if (i % 2 == 0) yield return i; } } Delegateهای ناشناسDelegateهای ناشناس که عملکردهای محدودی را در #C به وجود میآورند.کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی کند. برای مثال : int SumOfArrayElements(int[] array) { int sum = 0; Array.ForEach( array, delegate(int x) { sum += x; } ); return sum; } Delegate covariance and contravarianceتبدیل گروه های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند. اکسسورهای یک خاصیت(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 }
نوع داده Nullableنوع داده Nullable (که با یک علامت سوال قابل تشخیص است : int? i = null;)اجازه تخصیص مقدار null را برای انواع دادهای میدهد.این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL میشود. در این حالت نوع ستونی INTEGER NULL در SQL به طور مستقیم به int? در سی شارپ تبدیل میشود. داده های Nullable در آخرین لحظات آگوست 2005 اضافه شدند چند هفته متنده به اتمام کار اداری و برای بهبود زبان.متغیر Null در حقیقت خالی نیست، بلکه نمونه ای است از struct Nullable<T> با ویژگی HasValue مساوی false. وقتی در برنامه قرار می گیرد، خود به خود نمونه خالی در آن قرار می گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می کند: 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)»); وقتی درون شی ای کپی می شود، نمونه Nullable به صورت تشریفاتی در آن قرار می گیرد و در نتیجه مقادیر و منابع Null با هم برابر می شوند.در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر .NET2 ، به هسته CLR نیز مجهز شد و همه تکنولوژی ها نظیر #CوVBوSQL Server 2005و Visual Studio 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; } } {
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 '<null>' to an implicitly typed local */ } } }
توابع بسط داده شده (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 }
int Fn(int x) { return x+1; } لیست پارامترها و بدنه عبارت لامبدا توسط => از هم جدا می شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می توان بدنه آن را با استفاده از {} نشان داد. static void Main(string[] args) { (int x) => { x + 1; return x * x; }; }
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; } } }
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 }; }
چرا 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 به صورت زیر است: 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); { }
آرایههای نوع ضمنی :آرایهها را نیز میتوان با استفاده از کلمه کلیدی var تعریف کرد. static void Main(string[] args) { var a = new[] { 1, 10, 100, 1000 }; // int[] var b = new[] { 1, "one", 2 }; // Error } (CLR(Common Language Runtimeبخش مرکزی .NET Framework ، محیط اجرایی Runtime میباشد که اصطلاحاً به آن CLR یا .NET Runtime میگویند.کدهایی که تحت کنترل CLR اجرا میشوند اغلب به عنوان کدهای مدیریت شده نامیده میشوند. اگر چه،پیش از این که کدها(همه زبانهای .NET ) به وسیله CLR اجرا شوند،بایستی مورد کامپایل قرار گیرند.در .NET عمل کامپایل در دو مرحله صورت میگیرد: 1) کامپایل سورس کد به MSIL. 2) کامپایل MSIL به کد مختص پلتفرم به وسیله 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ارائه گردید برخی ویژگیهای MSIL شی گرایی و بکارگیری واسطها تمایز فراوان بین انواع مقداری و ارجاعی تعیین Strong Type(نوع داده Variantدیگر معتبر نیست) مدیریت خطا از طریق به کارگیری Exceptio بکارگیری صفات پیش پردازندهویژگی «دستورات پیش پردازنده» سی شارپ(اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورات پیش پردازنده 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 CLI: Common Language Infrastructure CLS: Common Language Specification IEC: International Electrotechnical Commission ISO: International Organization for Standardization LINQ: Language Integrated Query منابع
پیوندهای بیرونی
جستارهای وابسته
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net