PDA

View Full Version : سوال: Override کردن در #C



hessam2003
دوشنبه 02 اردیبهشت 1392, 00:43 صبح
سلام.
نحوه کاربرد Override و Virtual در کدنویسی کلاس ها چیست؟
تفاوت این دو در چیست؟

alexmcse
دوشنبه 02 اردیبهشت 1392, 13:50 عصر
سلام
برنامه رو اجرا کن
و برنامه رو تحلیل کن

override

abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int side = 0;

public Square(int n)
{
side = n;
}
// Area method is required to avoid
// a compile-time error.
public override int Area()
{
return side * side;
}

static void Main()
{
Square sq = new Square(12);
Console.WriteLine("Area of the square = {0}", sq.Area());
}

interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}

}


virtual

class TestClass
{
public class Dimensions
{
public const double PI = Math.PI;
protected double x, y;
public Dimensions()
{
}
public Dimensions(double x, double y)
{
this.x = x;
this.y = y;
}

public virtual double Area()
{
return x * y;
}
}

public class Circle : Dimensions
{
public Circle(double r) : base(r, 0)
{
}

public override double Area()
{
return PI * x * x;
}
}

class Sphere : Dimensions
{
public Sphere(double r) : base(r, 0)
{
}

public override double Area()
{
return 4 * PI * x * x;
}
}

class Cylinder : Dimensions
{
public Cylinder(double r, double h) : base(r, h)
{
}

public override double Area()
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}

static void Main()
{
double r = 3.0, h = 5.0;
Dimensions c = new Circle(r);
Dimensions s = new Sphere(r);
Dimensions l = new Cylinder(r, h);
// Display results:
Console.WriteLine("Area of Circle = {0:F2}", c.Area());
Console.WriteLine("Area of Sphere = {0:F2}", s.Area());
Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
}
}
/*
Output:
Area of Circle = 28.27
Area of Sphere = 113.10
Area of Cylinder = 150.80
*/
در سایت جستجو کن در این مورد مطالب بسیار است

youngold
دوشنبه 02 اردیبهشت 1392, 15:27 عصر
بحث تفاوت نیست چون در یک رده نیستن که مورد قیاس قرار بگیرند

در شی گرایی بعضی از متد ها رو virtual و یا کلاس abstract (توضیح خودش رو داره ، برای abstract کردن یک متد باید حتماً کلاسش هم abstract باشه) مینویسید تا اونها رو override کنید

پس به جای تفاوت override با virtual باید تفاوت virtual , abstract رو مطالعه کنید ، منابع کافی موجود هست

group45
دوشنبه 02 اردیبهشت 1392, 19:49 عصر
برای این منظور باید مفهوم شی گرایی رو بدونید و کار با کلاسها و ارث بری از اونها
پیشنهاد میکنم یه جزوه سبک از آموزش جاوا رو بخونید تا این مفاهیم رو متوجه بشید

hessam2003
سه شنبه 03 اردیبهشت 1392, 01:14 صبح
میشه کاربرد این 2 تابع را توضیح بدید؟