پروژه مهندسی نرم افزار uml دیکشنری بخش دوازدهم
ویژگیهای جدید در 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
}
نکته مهم : سطح دسترسی خاصیت نمیتواند بالاتر از سطح دسترسی اکسسورها باشد.به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا میشود.
نوع داده 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 را شامل شد.