عضو کانال یوتیوب ما شوید.

آموزش سی شارپ – توابع پیشرفته

آموزش سی شارپ
آموزش سی شارپ

توابع پیشرفته سی شارپ

در بخش قبلی برخی از خواص توابع را مطالعه کردید در این بخش توابع را به صورت پیشرفته تری برای شما توضیح خواهیم داد همراه ما باشید.

 

حتما قبل از بررسی توابع پیشرفته در سی شارپ نوشته ی مطالب قبلی این دوره ی آموزشی را با هشتگ #دوره آموزشی_سی_شارپ در سایت ما را مطالعه کنید.

 

Return کردن object از متد:

در برنامه‌ی زیر کلاسی به اسم Person وجود دارد که در این کلاس متدی به اسم ()CreateNewPerson است.

یک شیء از جنس Person می‌سازد و این شیء را return می‌کند:

 

class Person
{
   string Name, Family;

   public Person(string name, string family)
   {
      Name = name;
      Family = family;
   }
 
   public Person CreateNewPerson(string name, string family)
   {
      Person ob = new Person(name, family);
      ob.Name = name;
      ob.Family = family;
      return ob;
   }
 
   public void Show()
   {
      Console.WriteLine("Name: {0}, Family: {1}", Name, Family);
   }
}

// Using :
Person firstPerson = new Person("Catherine", "Gilbert");
Console.Write("Fist Person = ");
firstPerson.Show();

Person secondPerson = firstPerson.CreateNewPerson("Damon", "Salvatore");
 
Console.Write("Second Person = ");
secondPerson.Show();

 

Return کردن یک آرایه:

گاهی شما از یک متد وظیفه ی بازگشت آرایه را دارید.

در مثال زیر متد GetFriends() در کلاس Person انجام خواهد شد :
class Person
{
   string Name, Family;
   string[] Friends;
   public string[] GetFriends()
   {
      return Friends;
   }

   public Person(string name, string family)
   {
      Name = name;
      Family = family;
   }

   public void Show()
   {
      Console.WriteLine("Name: {0}, Family: {1}", Name, Family);
   }

   public void CreatFriends(params string[] buddies)
   {
      Friends = new string[buddies.Length];
      for (int i = 0; i < buddies.Length; i++)
         Friends[i] = buddies[i];
   }
}

// Using :
firstPerson.CreatFriends("Stefan", "Damon", "Elena");
string[] personFriends = firstPerson.GetFriends(); 
Console.Write("Catherine's Friends: ");
for (int i = 0; i < personFriends.Length; i++)
{
   Console.Write(personFriends[i] + ", ");
}

 

معرفی Method Overloading:

مفهوم Method Overloading در واقع به این معناست که چندمتد می‌توانند نام یکسانی داشته باشند.

به‌شرطی که تعریف و یا تعداد پارامتر های آن‌ها متفاوت باشد؛

در این‌ موارد گفته می‌شود که متدها overload شده‌اند و درکل به این پروسه method overloading گفته می‌شود.

یکی از جنبه‌های اجرای polymorphism (چند ریختی) است.

static void MethodA()
{
} 
static void MethodA(string a)
{
}
static int MethodA(double a, int b )
{
}

// Using :
MethodA();
MethodA("");
MethodA(5.25,10);
مثال :
class MethodOverloading
{
   public int Addition(int a, int b)
   {
      return a + b;
   }
   public int Addition(int a, int b, int c)
   {
      return a + b + c;
   }
   public float Addition(float a, float b)
   {
      return a + b;
   }
   public float Addition(float a, float b, float c)
   {
      return a + b + c;
   }
}

در بالا ما چندین ورژن از متد ()Addition را داریم که هر کدام از نظر نوع و تعداد پارامترها با بقیه متفاوت است.

همچنین return-type آن‌ها هم می‌تواند متفاوت باشد.

توجه کنید که overload کردن به شکل زیر کاملاً نادرست است زیرا تعداد و نوع پارامترهای متناظر یکی است:

public void OvlDemo(int a)
{
   Console.WriteLine("One parameter: " + a);
}
public int OvlDemo(int a)
{
   Console.WriteLine("One parameter: " + a);
   return a * a;
}

 

مفهوم Overload Constructors:

خاصیت Overload Constructors در زبان برنامه نویسی سی شارپ باعث می‌شود بتوانید به طرق مختلفی object های خود را بسازید.

به مثال زیر توجه کنید:
class MyClass
{
   public int x;

   public MyClass()
   {
      Console.WriteLine("Inside MyClass().");
      x = 0;
   }
   public MyClass(int i)
   {
      Console.WriteLine("Inside MyClass(int).");
      x = i;
   }
   public MyClass(double d)
   {
      Console.WriteLine("Inside MyClass(double).");
      x = (int)d;
   }
   public MyClass(int i, int j)
   {
      Console.WriteLine("Inside MyClass(int, int).");
      x = i * j;
   }
}

// Using :
MyClass t1 = new MyClass();
MyClass t2 = new MyClass(88);
MyClass t3 = new MyClass(17.23);
MyClass t4 = new MyClass(2, 4);

overload کردن constructor های کلاس، این امکان را می دهد که object ها به طرق مختلفی بتوانند ساخته شوند.

class Employee
{
   public int IdNumber;
   public double Salary;

   public Employee()
   {
      IdNumber = 999;
      Salary = 0;
   }
   public Employee(int empId)
   {
      IdNumber = empId;
      Salary = 0;
   }
   public Employee(int empId, double sal)
   {
      IdNumber = empId;
      Salary = sal;
   }
   public Employee(char code)
   {
      IdNumber = 111;
      Salary = 100000;
   }
}

// Using :
Employee aWorker = new Employee();
Employee anotherWorker = new Employee(234);
Employee theBoss = new Employee('A');
Console.WriteLine("{0} --- {1}", aWorker.IdNumber, aWorker.Salary);
Console.WriteLine("{0} --- {1}", anotherWorker.IdNumber, anotherWorker.Salary);
Console.WriteLine("{0} --- {1}", theBoss.IdNumber, theBoss.Salary);

 

درخواست یک overloaded constructor از طریق this:

هنگامی‌که با constructor های overload شده کار می‌کنید، یک constructor می‌تواند، constructor دیگری را درخواست کند.

این‌کار از طریق کلمه‌کلیدی this انجام می‌شود.

فرم کلی آن به‌شکل زیر است:
constructor-name(parameter-list1) : this(parameter-list2) {
   // ... body of constructor, which may be empty
}

در این‌جا ابتدا با توجه به parameter-list2 یکی از constructor های overload شده اجرا می‌شود.

سپس اگر کدی درون constructor اصلی (constructor اولیه) وجود داشته باشد، اجرا می‌شود.

به مثال زیر توجه کنید:
class AlphaBeta
{
   public int Alpha, Beta;

   public AlphaBeta() : this(0, 0)
   {
      Console.WriteLine("Inside AlphaBeta()");
   }
   public AlphaBeta(AlphaBeta obj) : this(obj.Alpha, obj.Beta)
   {
      Console.WriteLine("Inside AlphaBeta(obj)");
   }
   public AlphaBeta(int i, int j)
   {
      Console.WriteLine("Inside AlphaBeta(int, int)");
      Alpha = i;
      Beta = j;
   }
}
مثال :
class AlphaBeta
{
   public int Alpha, Beta;
   
   public AlphaBeta()  : this(0, 0)
   {
      Console.WriteLine("Inside AlphaBeta()");
   }
   public AlphaBeta(AlphaBeta obj) : this(obj.Alpha, obj.Beta)
   {
      Console.WriteLine("Inside AlphaBeta(obj)");
   }
   public AlphaBeta(int i, int j)
   {
      Console.WriteLine("Inside AlphaBeta(int, int)");
      Alpha = i;
      Beta = j;
   }
}

// Using :
AlphaBeta ob1 = new AlphaBeta();
AlphaBeta ob2 = new AlphaBeta(8, 9);
AlphaBeta ob3 = new AlphaBeta(ob2);
 
Console.WriteLine();
Console.WriteLine("ob1.x, ob1.y: " + ob1.Alpha + ", " + ob1.Beta);
Console.WriteLine("ob2.x, ob2.y: " + ob2.Alpha + ", " + ob2.Beta);
Console.WriteLine("ob3.x, ob3.y: " + ob3.Alpha + ", " + ob3.Beta);

به این نکته توجه کنید، پارامترهایی که بعد از this می‌آیند مشخص می‌کنند که کدامین constructor باید در ابتدا اجرا شود.

مثلاً برای ()AlphaBeta که خودش پارامتری ندارد، (this(0, 0 دو عدد integer دارد و مشخص می‌کند.

ابتدا باید آن constructor ای اجرا شود که دو پارامتر int دارد.

بنابراین ابتدا محتویات (AlphaBeta(int i, int j اجرا شده و سپس محتویات ()AlphaBeta اجرا می‌شود؛

در مورد (AlphaBeta(AlphaBeta obj نیز مراحل به‌ترتیب قبل است.

(This(obj.Alpha, obj.Beta دو عدد int گرفته است بنابراین ابتدا محتویات (AlphaBeta(int i, int j اجرا شده.

سپس محتویات (AlphaBeta(AlphaBeta obj اجرا می‌شود.

یکی از مزایای این کار این است که از کدنویسی اضافی جلوگیری می‌کند.

با این‌کار شما دیگر در هر constructor نیاز ندارید که برای مقداردهی به Alpha و Beta کد تکراری بنویسید.

مثال:
class Mouse
{
   public Mouse(): this(-1, "")
   {
   }
   public Mouse(int weight, string name)
   {
      Console.WriteLine("Constructor weight = {0}, name = {1}", weight, name);
   }
}
            
// Using :
// Test the two constructors for Mouse type.
Mouse mouse1 = new Mouse();
Mouse mouse2 = new Mouse(10, "Sam");

 

برای استفاده از تمامی جلسات از هشتگ #دوره آموزشی_سی_شارپ در سایت ما استفاده کنید.

منتظر جلسه ی بعدی دوره آموزشی سی شارپ باشید.

موفق و پیروز باشید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]