PDA

View Full Version : مبتدی: فرق بین متد Virtual و Abstract



parsa lotfy
شنبه 08 اسفند 1394, 11:35 صبح
با سلام...

بنده دارم کتاب دیتل رو میخوونم ...:لبخند:

در جایی گفته شده برای ایجاد متدی که بشود آن متد را تعریف دوباره کرد ، باید اوون رو Virtual یا Abstract تعریف کرد ...

در یکی دو فصل بعد در مبحث چندریختی (Polymorphism ) کلاسی از نوع انتزاعی ( Abstract ) ایجاد کرده ، در آن کلاس متدی ایجاد کرده که قصد تعریف دوباره ی ان را در اینده دارد...

آن متد رو از نوع Abstract ایجاد کرده ، حالا سوال من اینه که چرا آن متد را Virtual تعریف نکرد ؟؟؟:متفکر:

و اصلا چه تفاوتی بین متد Virtual و Abstract وجوود دارد ؟؟؟:متفکر:

کد آن کلاس را هم در پایین میگذارم...

با تشکر:قلب::قلب::قلب:

// Employee abstract base class.
public abstract class Employee
{
// read-only property that gets employee's first name
public string FirstName { get; private set; }

// read-only property that gets employee's last name
public string LastName { get; private set; }

// read-only property that gets employee's social security number
public string SocialSecurityNumber { get; private set; }

// three-parameter constructor
public Employee( string first, string last, string ssn )
{
FirstName = first;
LastName = last;
SocialSecurityNumber = ssn;
} // end three-parameter Employee constructor

// return string representation of Employee object, using properties
public override string ToString()
{
return string.Format( "{0} {1}\nsocial security number: {2}",
FirstName, LastName, SocialSecurityNumber );
} // end method ToString

// abstract method overridden by derived classes
public abstract decimal Earnings(); // no implementation here
} // end abstract class Employee

csharpcollegian
شنبه 08 اسفند 1394, 12:06 عصر
سلام،
زمانی که شما می خواهید متدی طراحی و پیاده سازی کنید، تکرار می کنم """پیاده سازی""" کنید و به کاربرهای بعدی اجازه بدید که اگر خواستند بتوانند متد رو دوباره پیاده سازی کنند از Virtual استفاده می کنید
در واقع در این مدل کاربر """حق انتخاب""" داره، هم می تونه از متد شما (پیاده سازی شما) استفاده کنه هم می تونه مجددا متدتون رو به روش دلخواه خودش پیاده سازی کنه
ولی در Abstract شما قصد پیاده سازی متدی رو ندارید، بلکه فقط تشخیص میدید که به چنین متدی نیاز هست و فقط امضای اون رو مشخص می کنید
در این حالت کاربر """مجبور""" هست که اون متد رو پیاده سازی کنه
موفق باشید

parsa lotfy
شنبه 08 اسفند 1394, 12:22 عصر
کاملا متوجه شدم !!!!
خیلی ممنون:لبخندساده: