View Full Version : سوال: در مورد متد های Virtual
WindowsXp
جمعه 05 شهریور 1389, 06:11 صبح
سلام یک کتاب داشتم مطالعه می کردم به اینجا رسیدم میشه یکی برام همراه با مثال توضیح بده :
When a virtual method is invoked, the runtime type of the instance for which that invocation takes place
determines the actual method implementation to invoke. In a nonvirtual method invocation, the compile-time
type of the instance is the determining factor.
منظورش از Runtime type و CompileTime type چیه؟
همچین چیزیه :
object i;
i=new int();
C Sharp
جمعه 05 شهریور 1389, 06:52 صبح
همونطور که خودتون حتما میدونید ، نوع int از نوع object مشتق شده ، بعبارت دیگه object کلاس پایه نوع int هست.
اگه شما تو کلاس پدر متدی رو virtual تعریف کنید و تو کلاس فرزند ، اون متد رو override کرده باشید ، زمان اجرا متد فرزند فراخوانی میشه ، اما اگه این متد تو کلاس پدر virtual نباشه ، زمان اجرا متد پدر فراخوانی میشه
class Parent
{
protected int _age;
public virtual int Age
{
get { return _age; }
}
public Parent(int age)
{
_age = age;
}
}
class Child : Parent
{
public override int Age
{
get { return _age + 1; }
}
public Child(int age)
: base(age)
{
}
}
class Program
{
static void Main(string[] args)
{
Parent emmy = new Child(10);
Console.WriteLine("Age is : " + emmy.Age);
Console.ReadLine();
}
}
تو مثال بالا ، عدد 11 تو خروجی چاپ میشه ، یعنی متد فرزند فراخوانی میشه ، چون تو کلاس پدر خاصیت سن virtual تعریف شده
حالا کافیه خاصیت سن تو کلاس پدر رو از حالت virtual و در کلاس فرزند از حالت override در بیارید و یکبار دیگه خروجی بگیرید ، ایندفعه میبینید که عدد 10 در خروجی ظاهر میشه ، یعنی متد پدر فراخوانی میشه
تو این شرایطی که ما شیئ emmy رو ساختیم ، نوع زمان کامپایلش میشه Parent و نوع زمان اجرا میشه Child
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.