تعریف و استفاده از متدها در سی شارپ

یکی از دشوارترین فرآیندهای برنامه نویسی تعیین نام ها می باشد که با توسعه برنامه سختی این امر دو چندان می شود. در درس قبل درمورد ارث بری و نحوه پیاده سازی آن توضیح داده شد. اگر در کلاس Person که دو کلاس دیگر از آنها ارث بری داشت متد ShowInfo تعریف می شد، هنگام تعریف این متدها در کلاس های Student و Teacher با پیغام هشدار (Warning) مواجه می شدید، زیرا متد تعریف شده، هم نام متدی از کلاس پایه می باشد.

تعریف جدیدی از متد

در صورتیکه قصد داشته باشید از متدی هم نام در کلاس های مشتق استفاده نمایید، می توانید از کلمه کلیدی new استفاده نمایید.

class Person
{
    ...
    public void ShowInfo()
    {
    
    }
}    
class Student:Person
{ 
    ...
    new public void ShowInfo()
    {
        
    }

}

Virtual methods

گاهی اوقات ممکن است متدی در کلاس پایه داشته باشید که نیاز باشد در کلاس های مشتق شده به روش متفاوتی پیاده سازی شود. در مثال های قبل متدی به نام ShowInfo در کلاس های مشتق شده وجود داشت که نام آنها یکسان بود اما عملکرد آنها تفاوتی (هرچند اندک) با یکدیگر داشت بطوریکه در کلاس Student متن "Student Info" به همراه مشخصات و در کلاس Teacher متن "Teahcer Info" به همراه سایر اطلاعات نمایش داده می شود. در صورتیکه در کلاس های مشتق شده، متدی هم نام با متد موجود در کلاس پایه وجود داشته باشد، متد کلاس پایه نادیده گرفته می شود (hidden) اما با تعریف متد بصورت Virtual در کلاس پایه، این قابلیت را می توان به آن داد که این متد در کلاس های مشتق شده به روش متفاوتی پیاده سازی شود.

public class Person
{ 
    ...    
    public virtual void ShowInfo()
    {
        Console.WriteLine(Id + " " + name);
    }
}

Method overriding

حال برای پیاده سازی این متد در کلاس های مشتق شده باید آن را override کرد.

class Student:Person
{
    ...
    public override void ShowInfo()
    {
        Console.WriteLine("Student Info: " + Id+" " + Name + " " + Major);
    }

}
class Teacher:Person
{
    ...
    public override void ShowInfo()
    {
        Console.WriteLine("Teacher Info: " + Id+" " + Name + " " + Major);
    }

}

بدین ترتیب متد ShowInfo در هریک از کلاس های مشتق شده به شیوه مورد نیاز عمل خواهد کرد.