تبليغاتX
جادوي سي شارپ
پاسخ به نظرات
یاسمن عزیز در مورد یه قطعه کد C# توضیح خواستن که توضیحش اینه:
خط 1: آرایه ای از نوع Point گرفته به تعداد 10 تا
خط 2: یک شی از نوع Point گرفته
خط 3: CopyTo محتوای شی Tn2 را در Tn1 کپی می کند. توجه کنید به این نکته که اگه دوشی را با استفاده از علامت = برابر همدیگه قرار بدید آدرس اون اشیا باهم یکی میشه یعنی واقعا اون دو شی باهم یکی میشن نه اینکه باهم برابر می شن!
خط 4و5و6: از Convert.Toint32 برای تبدیل به اعداد int 32 بیتی استفاده میشه و از Convert.ToSingle برای تبدیل به اعداد اعشاری استفاده میشه.
پیشنهاد می کنم مقاله گرافیک در .NET را مطالعه کنید.

پیشنهاد تبدیل مطالب به PDF هم پیشنهاد خوبیه که از طرف آقای مجید مهرتاش ارائه شده. البته ما قبلا هم این کار را انجام دادیم و تعدادی از مقالات را بصورت PDF برای دانلود گذاشتیم. مطالب جدیدی هم که مهدی جان دارن می نویسن به محض تمام شدن به صورت یکجا بصورت PDF تبدیل می کنیم.

مجیدجان برای این کار باید از Hook یا Subclass استفاده کنی. اون سایتها و وبلاگها هم حق داشتن چون این مبحث گسترده و پیچیده است. تازه اگه بخوای از این دو روش استفاده کنی کد شما Unmanaged میشه. ولی اگه بازم می خوای پیگیری کنی یه پروژه توی Codeproject هست که یه Library برای استفاده از Hook و Subclass در .NET ارائه داده. زحمت جستجوش با خودت!



DebuggerStepThrough
نکته جالبی که به تازگی بهش برخوردم یه Attribute به نام DebuggerStepThrough است. حتما تا حالا با این مشکل مواجه شدید که در حال Debug بصورت خط به خط (با استفاده از کلید F11) کنترل اجرای برنامه برای مقداردهی Property ها و یا خواندن مقدار اونا دائما وارد کد اونها یا همون Property Accessor ها میشه که این مسئله باعث میشه تا زمان زیادی برای Debug کدتون هدر بره. در وهله اول به راحتی می تونید با استفاده از کلید F10 این مشکلو برطرف کنید! اما در بیشتر مواقع نوع کد باعث میشه که نتونید این کار را انجام بدید! به مثال زیر توجه کنید:
کلاس Person دارای سه Property به نامهای PersonName و Grade و Salary است. متد CalculateSalary برای محاسبه حقوق بر اساس درجه کارمند و حقوق پایه استفاده می شود. اگر کد فراخوانی متد CalculateSalary شما به شکل زیر باشه:

calcSalary=CalculateSalary(p.Grade, p.Salary);

در اینجا اگه با کلید F10 بخواید تو کدتون حرکت کنید نمی تونید کد متد CalculateSalary را قدم به قدم مشاهده کنید اگه با کلید F11 حرکت کنید کد مربوط به Proprty های Grade و Salary را هم باید قدم به قدم مشاهده کنید. برای جلوگیری از این حالت DebuggerStepThrough را باید برای Property های مورد نظر استفاده کنید. به عنوان مثال تعریف Grade و Salary به شکل زیر نوشته خواهد شد:
public int Grade
{
[DebuggerStepThrough]
get { return _grade; }
[DebuggerStepThrough]
set { _grade = value; }
}

public int Salary
{
[DebuggerStepThrough]
get { return _salary; }
[DebuggerStepThrough]
set { _salary = value; }
}



از این Attribute می تونید برای متدها، Property Accessor ها، کلاسها و structها استفاده کنید.

 



تگهای فارسی: محمد صافدل، سی شارپ، سي شارپ، دیباگ
English Tags: Mohammad Safdel,Csharp, C sharp, C#, Debug, DebuggerStepThrough, Attribute
+ نوشته شده در  یکشنبه بیست و هفتم مرداد 1387ساعت 13:18  توسط ققنوس  | 
واسطها (Interfaces):
یک واسط یا Interface شامل تعاریفی است برای یک کلاس که این تعاریف شامل معرفی مجموعه ای از متدها با آرگومانهای مشخص است. اگر کلاسی دارای اون متدها باشد، میگیم که این کلاس از یک واسط Implement شده است. این فرض و قولی است برای اینکه شما مطمئن باشید که یک کلاس حتما دارای متدهای نام برده شده باشد. واسط تعریف امضای متدهای عمومی هست ولی بدنه این متدها کاملا خالی هستند.
اگر یک کلاس از یک واسط Implement شده باشد که نام واسط xyz باشد، می توانید به اون کلاس ارجاع داشته باشید همانطوری که به واسط ارجاع داشته اید. و تا زمانی که سی شارپ اجازه نمی دهد که یک کلاس از بیش از یک کلاس به ارث برسد، تنها راه برای اینکه کلاس از بیش از یک کلاس به ارث برسد، استفاده از کلاس واسط هست.
حالا بهتره با یک مثال مطلب خودمون رو ادامه بدیم، در این مثال ما یک کلاس از نوع واسط داریم که لیستی از عناصر انتخاب شده یا یک لیست از عناصر CheckBox را فراهم می کند. (لیست کد1)
// List Code 1
public interface IMultiSelect
{
  void Clear();
  System.Collections.ArrayList GetSelected();
}
همانطور که می بینید این واسط دارای دو متد است یکی با نام Clear و دیگری با نام GetSelected که بدنه اون هم خالی است.
حالا اگر بخواهیم کلاسی رو از این واسط Implement کنیم، ابتدا باید در تعریف این کلاس واسط رو مشخص کنیم و سپس تمامی متدهای واسط رو در کلاس جدید پیاده سازی کنیم. به لیست کد 2 دقت کنید:
// List Code 2 (Class Sample Implemented On IMultiSlect Interface)
public class ListSelect : IMultiSelect
{
public ListSelect() { }
public void Clear() { }
public System.Collections.ArrayList GetSelected()
{
  return new System.Collections.ArrayList();
}
}
در پروژه های بزرگ اول واسطها تعریف می شوند و بعد کلاسها بر اساس اونها تعریف می شوند. معمولا متدهایی رو هم به عنوان رزرو تعریف می کنند که این متدها در زمانهای آپگرید برنامه ممکن است مورد استفاده قرار بگیرند. با این ترتیب چون ساختار کلاس، یا به اصطلاح امضای کلاس تغییری نمی کند پروژه با کپی فایل DLL جدید براحتی قابل بروزرسانی است و نیازی نسیت که کل پروژه مجددا ساخته شده و از طرف مشتری نصب شود.
پیشنهاد می شود در پروژه های خود ابتدا واسطها رو تعریف کنید و حتی متدهایی رو هم که فعلا نیاز ندارید رو در تعریف واسط قرار بدید سپس به پیاده سازی کلاسها بپردازید. (لازم نیست که دوباره به این نکته اشاره کنم که پیاده سازی واسط چون کدی در بدنه متدها ندارد عمل وقت گیری نخواهد بود).
تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، واسط، تعریف واسط، کلاس، تعریف کلاس، ارث بری، ارث بری بیش از یک کلاس
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Interface, Inheritance, Inherited Class, Drived Class, Declare Interface, Declare Class, Inherit from more class
+ نوشته شده در  شنبه نوزدهم مرداد 1387ساعت 15:37  توسط کنستانتین  |