PDA

View Full Version : این کد چند خطی به چه معنیه..



amirjalili
شنبه 27 شهریور 1389, 15:05 عصر
در کد زیر بعد از متد ها از ":" استفاده شده و بعدش از ()base استفاده شده. یعنی چی ؟ متد ها مثل ارث بری کلاس ها عمل کردن. این ":" برای متد ها چه معنی میده؟ من فقط با این ":" برای متد مشکل دارم. معنیش رو نمیفهمم


public class BaseException : System.Exception, ISerializable
{
public BaseException()
: base()
{
// Add implementation (if required)
}

public BaseException(string message)
: base(message)
{
// Add implementation (if required)
}
}

ASKaffash
شنبه 27 شهریور 1389, 15:12 عصر
سلام
یعنی اینکه قبل از اجرای دستورات درون Constructor کلاس فرزند اول Constructor کلاس پدر باید اجرا گردد و : base(message) متد OverLoad شده Constructor پدر است

amirjalili
شنبه 27 شهریور 1389, 15:19 عصر
با تشکر از شما.
مثالی راجع به اینکه اینکار در کجا به درد میخوره میشه بزنید.
چرا باید اول constructor کلاس پدر اجرا بشه؟

ASKaffash
شنبه 27 شهریور 1389, 15:32 عصر
سلام
فرض کنید یک کلاس ساده برای محاسبه سطح یک مستطیل داریم :


public class ab
{
protected int a, b;
public ab(int a, int b)
{
this.a = a;
this.b = b;
}
public int S()
{
return this.a * this.b;
}
}

حال می خواهیم یک کلاس وراثتی برای محاسبه حجم مکعب از روی این کلاس ایجاد کنیم دیگر نیازی به مولفه های a,b نیست :


public class abc : ab
{
private int c;
public abc(int a, int b, int c)
: base(a, b)
{
this.c = c;
}
public int V()
{
return base.a * base.b * this.c;
}
}

amirjalili
شنبه 27 شهریور 1389, 16:04 عصر
ممنون.
حالا برای نمونه گیری از abc باید چه طوری عمل کنم ؟
یعنی اول باید سازنده کلاس ab رو مقدار دهی کنیم؟


ab AB = new ab(1,4);

من میخوام یه new از abc بگیرم. چی کار باید بکنم؟
اسم این کار رو هم بهم بگین میرم خودم دنبالش. به این کار که "قبل از اجرای دستورات درون Constructor کلاس فرزند اول Constructor کلاس پدر باید اجرا گردد" چی میگن؟
همینم بدونم میرم سراغش

ASKaffash
یک شنبه 28 شهریور 1389, 08:25 صبح
سلام
اینطوری :


abc o = new abc(1, 2, 3);
o.V();

amirjalili
یک شنبه 28 شهریور 1389, 08:38 صبح
به این متد یا سازنده ای از کلاس فرزند که سازنده کلاس پدر رو مقدار دهی میکنه base constructor initializer in derived type

این مقدار دهی به سازنده کلاس پدر وقتی به کار میره که نیاز به non-default constructor باشه.
این یه نمونه علاوه بر مثال بالا که ASKaffash عزیز نشون دادن



class baseConstructor
{
}
public class A // This is the base class.
{
public A(int value)
{
// Executes some code in the constructor.
Console.WriteLine("Base constructor A()");
}
}

public class B : A // This class derives from the previous class.
{
public B(int value)
: base(value)
{
// The base constructor is called first.
// ... Then this code is executed.
Console.WriteLine("Derived constructor B()");
Console.WriteLine();
}
}


مقدار دهی :


class Program
{
static void Main()
{
// Create a new instance of class A, which is the base class.
// ... Then create an instance of B, which executes the base constructor.
A a = new A(0);
B b = new B(1);
}
}




خروجی :


Base constructor A()
Base constructor A()
Derived constructor B()