PDA

View Full Version : سوال: در مورد متد های Virtual



WindowsXp
جمعه 05 شهریور 1389, 05: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, 05: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