مبحث overloading :

گاهی از اوقات لازم است تا نگارش های مختلفی از یک تابع داشته باشیم. برای مثال تعریف سه تابع با یک نام اما با آرگومانهای مختلف. به این نوع توابع و یا متدها اصطلاحا Overloaded Methods می گویند . ( فکر کنم آنرا سربارگذاری توابع ترجمه کرده اند! ) برای مثال :



کد:
void myMethod(int p1);
void myMethod(int p1, int p2);
void myMethod(int p1, string s1);
مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex18 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :


کد:
using System;

namespace ex18
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			writeIT();

                  writeIT(12); 

			Console.ReadLine(); 
		}

		public static void writeIT()
		{
			Console.WriteLine(" writeIT() Ver." ); 
		}

		public static void writeIT(int intI)
		{
			Console.WriteLine(" writeIT(intI) Ver. = " + intI ); 
		}


	}
}
توضیحاتی در مورد کد فوق :

1- نحوه ی تعریف دو تابع با یک نام را ملاحظه می نمایید. اینکار در زبان سی ممنوع است!
2- کامپایلر به صورت هوشمند بر اساس نوع و تعداد آرگومانهای ورودی ، ورژن مناسب را انتخاب و اجرا می کند.

نمونه ی ضعیفی از این بحث در وی بی 6 به صورت تعریف توابعی با پارامترهای Optional وجود داشت .




مباحث تکمیلی آرایه ها (آرایه های چند بعدی):

آرایه های معمولی (یک بعدی) را می توان یک ردیف با تعدادی خانه خالی آماده ی پر شدن در نظر گرفت. آرایه ی دوبعدی را می توان مانند یک جدول تشکلیل شده از ردیف ها و ستون ها در نظر گرفت و الی آخر...
سی شارپ دو نوع آرایه ی چند بعدی را پشتیبانی می کند : rectangular and jagged
در یک آرایه ی rectangular هر ردیف ، طولش با ردیف بعدی یکی است. آرایه ی jagged در حقیقت آرایه ایی از آرایه ها است ، بنابراین هر کدام از آنها می تواند طول مختلفی داشته باشد.

تعریف یک آرایه ی دوبعدی به صورت زیر است :



کد:
type [,] array-name
مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex19 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :



کد:
using System;

namespace ex19
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			const int rows = 4;
			const int columns = 3;
			// declare a 4x3 integer array
			int[,] rectangularArray = new int[rows, columns];
			// populate the array
			for (int i = 0;i < rows;i++)
			{
				for (int j = 0;j<columns;j++)
				{
					rectangularArray[i,j] = i+j;
				}
			}
			// report the contents of the array
			for (int i = 0;i < rows;i++)
			{
				for (int j = 0;j<columns;j++)
				{
				Console.WriteLine("rectangularArray[{0},{1}] = {2}",
						i,j,rectangularArray[i,j]);
				}
			}

			Console.ReadLine(); 
		}
	}
}
توضیحاتی در مورد کد فوق :
1- نحوه ی تعریف ، مقدار دهی اولیه و استفاده از آرایه های دو بعدی را در مثال فوق ملاحظه می نمایید.
2- در یک آرایه ی دوبعدی محل قرار گیری ردیف ها و ستون ها برای مثال به صورت زیر است :

کد:
کد:
new int[rows, columns]-
استفاده از آرایه های چند بعدی :

مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex20 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :

کد:
کد:
using System;

namespace ex20
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			const int rows = 4;
			const int columns = 3;
			// imply a 4x3 array
			int[,] rectangularArray =
				{
                  {0,1,2},
                  {3,4,5}, 
                  {6,7,8},
                  {9,10,11}
				};
			for (int i = 0;i < rows;i++)
			{
				for (int j = 0;j<columns;j++)
				{
				Console.WriteLine("rectangularArray[{0},{1}] = {2}",
						i,j,rectangularArray[i,j]);
				}
			}
		}
	}
}
توضیحاتی در مورد کد فوق :
1- در حقیقت مثال فوق تعریف آرایه ایی از آرایه ها بود.
2- چون مقدار دهی اولیه به صورت واضحی انجام شده نیازی به ذکر ابعاد آرایه به صورت صحیح وجود نداشت.


بحث آرایه ها ادامه دارد...