در مورد Binary Format و Soap - از کتاب Microsoft 70-536

  • دو روش Binary Format و Soap وجود دارد. در Binary Format اگر هر دو طرف .Net باشند سرعت بالا است.
  • در Soap حجم  4 برابر باینری است  چون XML است.  همه قبولش دارند.
  • یک تفاوت بین Binary و Soap اینست که Binary از Fierwal  رد نمی شود اما Soap می تواند از Fierwal رد شود.  
  • در دات نت 1 نمی تواند BinaryFormat را باز کند.  

در مورد Collection ها در دات نت - از کتاب Microsoft 70-536

چند نوع Collection مختلف وجود دارد که هر کدام برای انجام کار خاصی استفاده می شوند:

  1. Array
  2. Array List
  3. Dictionary
  4. Hash Table

Collection نیز خیلی مهم است. در Collection هم می توان داده ها را به صورت ترتیبی یعنی پشت سر هم Add کرد و هم می توان آنها را به صورت Random اضافه نمود.اکنون در ادامه خاصیت های هر یک از Collection ها را مرور می کنیم:

  1. Array List: هم Index Base است و هم قابل افزایش است. Array List یک کلاس مرتب نشده است برای هر نوع تاپپی. برای Add کردن دیتا می باشد. می توان به Array List سایز هم بدهیم.
  2. Sorted List: یک Collection مرتب شده به صورت (Name, Value) است که براساس Name به Value می توان رسید.
  3. Queue: به صورت First In First Out است.
  4. Stack: به صورت last In First Out است.
  5. Hash Table: یک Collection  به صورت (Name, Value) است که از طریق Name می توان به  Valueرسید.
  6. BitArray: داده های Boolean دارد.
  7. String Collection: یک Collection است که فقط از String تشکیل شده است.
  8. String Dictionary: یک Collection است که فقط از String تشکیل شده است و به صورت (Name,Value) است.
  9. List Dictionary: Collection ایست برای ذخیره کردن دیتاهای کم یعنی 10 تا 20 تا. این برای لیست های کوچک است.
  10. Hubrid Dictionary: رفتار دوگانه دارد یعنی وقتی دیتاها کم است رفتار List Dictionary را دارد و وقتی دیتاها زیاد است رفتار Hash Dictionary را دارد.
  11. Name Value Collection: Collection ایست که از Name و Value تشکیل شده است.
  12. Add Range: یعنی داخلش Array نیز می توان Add کرد.
  13. کلا در Collection ها Object قرار می گیرد. یعنی محتویات Collection ها Object هستند یعنی Refrence Type هستند.
  14. در AddRange چیزی را می توان فرستاد که از ICollection مشتق شده باشد.  

اگر کلاسی که خودمان می نویسیم بخواهیم قابلیت AddRange داشته باشد باید از ICollection مشتق شده باشد. می توانیم توابع اش را Override کنیم.

در زیر برخی  از توابع را بررسی می کنیم:

  • Remove: محتوای عضوی که می خواهیم حذف شود را می گیرد.
  • Remove Range:
  • Remove: آن خانه خاصی را که می خواهد Remove کند را مشخص می نماید.

لازم به ذکر است که وقتی Remove می کنیم سایز کم می شود چون کلا آن خانه برداشته می شود.

Clear کل محتویات Array List را حذف می کند.

فایل Contains وجود یا عدم وجود عضوی را بررسی می کند و T یا F برمی گرداند.

 

آن Collection هایی که فقط String می توانند داشته باشند را اگر داخلش Int اضافه کنیم سیستم Exception می دهد.

همه این Collection ها از ICollection مشتق شده اند که بدانیم همه یک Functionality را دارند.

Count: تعداد دیتاهایی که در Collection  وجود دارد را برمی گرداند. یعنی ممکن است با سایز متفاوت باشد.

اینترفیس ICompartable از متد Compare استفاده کرده است:این متد بسیار ساده است و برای مقایسه دو پارامتر ورودی به کار می رود.

در Collection ها دسترسی به اطلاعات به صورت ترتیبی است. اما 2 نوع دیگر نیز به شرح زیر معرفی می گردد:

  1. Queue 
  2. Stack

تابع Count تعداد دیتاهای موجود را نمایش می دهد.

در مورد Queue دو تابع زیر مورد استفاده قرار می گیرد:

  1. Dequeu: برای حذف داده های موجود در صف استفاده می شود. حذف از صف به صورت First In First Out است.
  2. Equeu: برای اضافه کردن دیتا به صف اضافه می شود.
  3. Peak: اولین دیتایی که در صف وارد شده است را برمی گرداند اما حذف نمی کند.

یکی از کاربردهای Peak اینست که مثلا در سرویس Msqueu که از سرویس های ویندوز است سرویس های مختلف را در صف نگهداری می کند.

توجه شود که Dequeu همیشه آبجکت برمی گرداند. در صف همیشه Object قرار داده می شود.

در Stack نیز همیشه آبجکت اضافه می شود.توابع مورد استفاده در Stack به شرح زیر است:

  1. Count: تعداد واقعی دیتاهای موجود در Stack را برمی گرداند.
  2. POP: بالاترین عضو یعنی آن  عضوی که دیرتر از همه اضافه شده است را حذف می کند.
  3. Push: برای افزودن دیتا به Stack استفاده می شود و دیتا را به بالای Stack اضافه می کند.
  4. Peak: بالاترین عضو یعنی آن عضوی که دیرتر افزوده شده است را برمی گرداند اما حذف نمی کند.

یک Queue ممکن است در اختیار چند Queue Manager باشد.

اگر از Enumerable مشتق نشده باشد نمی توانیم از Foreach استفاده کنیم.

HashTable برای Lookup استفاده می شود. HashTable به صورت (Key,Value) است. در HashTable با Key می توان به Value رسید.

در hashTable اگر Key تکراری داشته باشیم Override می کند.

Key همیشه باید Uniqe باشد.

Object  در صورتی می تواند به آبجکت دیگری Cast شود که از یک نوع باشند.

دیکشنری از IDictionary مشتق شده است و IDictionary هم از ICollection مشتق شده است.

تابع Countains می تواند Key را بگیرد و بگوید که وجود دارد یا خیر.

SortedList هم خاصیت List معمولی را دارد و هم کاملا مثل Hashtable است. با Index نیز می توان به دیتاهای SortedList دست یافت. اگر Index های تکراری وجود داشته باشد به اولین Index که می رسد برمی گرداند.

SortedList همیشه مرتب است و بر روی لیست مرتیب کار می کند.

Hashtable برای پیاده سازی Compare باید از IEqualityCompare مشتق شود.

SortedList برای اینکه بتواند تابع Compare را Override کند باید از IComparable مشتق شده باشد.

دیکشنری های خاص به شرح زیر هستند:

  • List Dictionary: معمولا برای Collection های 10 الی 15 تایی خوب است برای بیشتر از این نه. لازم به ذکر است که Hashtable دارای Overrhead زیادی هست و مخصوصا برای داده های کمتر از 10 تا این Overhead خیلی زیاد است.
  • Hybride Dictionary: رفتار دوگانه دارد اگر دیتاها کمتر از 10 تا باشد مانند List عمل می کند و اگر دیتاها بیشتر از 10 تا باشد مانند HashTable رفتار می کند. از Hybride Dictionary وقتی استفاده می شود که دیتاها داینامیک هستند و تعداد آنها مثلا بین 5 تا 1000 متغیر است.
  • Ordered Dictionary: Object: خیلی سریع است. فرقش با Sorted List در سرعت زیادش است یعنی این سریعتر است. همان لحظه که دیتاها در ان Insert می شوند آنها را مرتب می کند و به صورت مرتب شده هم نگه می دارد. با ایندکس نیز می توان به داده هایش دسترسی داشت. یک تفاوت عمده دیگر که بین Ordered List و SortedList وجود دارد اینست که

OrderdList[Key or Index]-- > Value

SortedList[Key]--- > value

یعنی در Sorted List با Key نمی توانید Value را برگرداند.

توجه: در Hashtable نمی توان به دیتاها با Index دسترسی داشت. در ضمن Object های  داخلش نیز با Hash مرتب شده اند و ما نمی دانیم که کدام hash برای کدام آیتم است.

با تابع Remove At می توان یک ایندکس خاص راپاک کرد. 

در همه ی Dictionary ها حروف کوچک و بزرگ فرقی ندارد.

اگر بخواهیم نسبت به حروف حساس باشد یعنی بین first و FIRST تفاوت بگذارد باید توچه داشت که فقط HashTable و Sorted List را می تواk به حروف حساس کرد.   

BitArray فقط T  یا F برمی گرداند. خواص آن به شرح زیر می باشد:

  1. Resizable است.
  2. عملیات And، OR، XOR و ... بر رویش انجام می شود.
  3. وقتی Instance می سازیم بگوییم سایزش چقدر است و برای تغییر Property Length را زیاد کنیم.
  4. وقتی از BitArray یک Instance می سازیم باید در همان Constructor بگوییم که چه می خواهیم. دفعه اول همه را با F مقداردهی می کند.
  5. زمانی برای ما کاربرد دارد که یک ارایه داشته باشیم که داخلش T  و F باشد.
  6. با ایندکس نیز می توان به ان دست یافت.
  7. وقتی بخواهیم در این ارایه عدد 10 را ذخیره کنیم آن عدد را باینری می کند و باینری آن را نگهداری می کند.   

فواید Generic ها

Generic ها چه فایده هایی دارند:

  1. Performance  خیلی بالا می رود.
  2. تبدیل Type ها به یکدیگر کاهش می یابد.
  3. خطاها در زمان Compile به وجود می آیند. یعنی دیگر خطاها Run Time نیستند.

چند اینترفیس مهم در دات نت

چند مورد از اینترفیس های مهم در دات نت به شرح زیر هستند:

  1. IComparable
  2. IDisposable
  3. IConvertable
  4. IIEquatable
  5. IFormatable

پدر و فرزند در شی گرایی

وقتی به یک متد Object پدر پاس شده باشد، می تواند Object های فرزند را نیز به آن پاس کرد.