مشکل کد نوشته شده برای استفاده از تابع مجازی
با سلام . مشکل این کد در استفاده از توابع مجازی چیه؟؟ ( ممنون میشم راهنمایی کنید)
class Program
{
static void Main(string[] args)
{
circle c = new circle();
c.calculate;
Console.ReadKey();
}
class circle
{
public static void circle1()
{
int X;
Console.WriteLine("please enter x:");
X = int.Parse(Console.ReadLine());
}
public virtual void calculate(int x)
{
Console.WriteLine("area1 ={ 0}", 2 * 3.14 * x);
}
public override void calculate(int x)
{
Console.WriteLine("s ={ 0}", 3.14 * x*x);
}
}
}
3 پاسخ
قسمت main را به شکل زیر تغییر بدید
circle c = new circle();
int num;
Console.WriteLine("Enter a number");
num = int.Parse(Console.ReadLine());
c.calculate(num);
Console.ReadKey();
بعد یک سوال دیگه اینکه الان در این کد شما برای x عدد 6 رو در نظر گرفتید درصورتی که من میخواستم کد یجوری باشه که از کاربر عدد رو بگیره و ذخیره کنه که در یک قسمت از کد هم اینو نوشتم در این صورت x هر عددی میتونه باشه. ولی الان x 6 هست. میشه درباره ی این هم توضیح بدید؟؟ممنون
سلام به شما دوست عزیز.
مشکلاتی که کد شما داره اینه که اول شما داخل تابع main برای فراخوانی تابع فقط اسم تابع calculate رو نوشتید و ورودی و آرگومانش رو مشخص نکردید.
مشکل دومی که برنامه شما داره اینه که هم یک متد مجازی دارید و هم یه متد واقعی. توی یه کلاس شما حق این کار را ندارید و باید در یک کلاس شما یک متد را به صورت مجازی تعریف کنید و در کلاس فرزند آن را override کنید. من کد شما رو به شکل زیر تغییر دادم
public class CircleAbstract
{
public virtual void calculate(int x)
{
Console.WriteLine("area1 ={ 0}", 2 * 3.14 * x);
}
}
class circle:CircleAbstract
{
public static void circle1()
{
int X;
Console.WriteLine("please enter x:");
X = int.Parse(Console.ReadLine());
}
public override void calculate(int x)
{
Console.WriteLine("s ={ 0}", 3.14 * x * x);
}
}
static void Main(string[] args)
{
circle c = new circle();
c.calculate(6);
Console.ReadKey();
}