PDA

View Full Version : مقدار دهی متغیرهای کلاس پایه و استفاده از آن مقادیر از طریق شی کلاس مشتق



mahdieh5
دوشنبه 17 مرداد 1390, 23:44 عصر
با سلام
در کد زیر وقتی از طریق شی sh مقادیر متغیرهای X و Y کلاس پایه را مقدار دهی میکنم، سپس از طریق شی t1 مقدار متغیر Z راتعیین می کنم. مقدار X و Y را در توابع prime و squer صفر حساب میکند. گویا مقدار دهی نشده. مشکل کجاست؟



private void button1_Click(object sender, EventArgs e)
{
shape sh = new shape();
squer1 t1 = new squer1();
sh.X = Convert.ToInt32(textBox3.Text);
sh.Y = Convert.ToInt32(textBox4.Text);
t1.Z = Convert.ToInt32(textBox5.Text);
textBox1.Text = t1.prime().ToString();
textBox2.Text = t1.area().ToString();
}



تعریف کلاسها:

public class shape
{
private int x;
private int y;
public int X
{
get
{
return x;
}
set
{
x = value;
}
}

public int Y
{
get
{
return y;
}
set
{
y = value;
}
}

public virtual int area()
{
return (X*Y);
}

public virtual int prime()
{
return (X + Y);
}
}
public class squer1:shape
{
private int z;

public int Z
{
get
{
return z;
}
set
{
z = value;
}
}
public override int area()
{
return (X * Y * Z);

}
public override int prime()
{
return (X+Y)+Z;
}


}

ولی به این صورت درست جواب میدهد:

private void button1_Click(object sender, EventArgs e)
{
squer1 t1 = new squer1();
t1.X = Convert.ToInt32(textBox3.Text);
t1.Y = Convert.ToInt32(textBox4.Text);
t1.Z = Convert.ToInt32(textBox5.Text);
textBox1.Text = t1.prime().ToString();
textBox2.Text = t1.area().ToString();
}

Esmail Solhkhah
سه شنبه 18 مرداد 1390, 00:00 صبح
دوست عزیز کلاس مشتق شده فقط اعضای و آیتمهایی رو تو بیس مشخص کردید به ارث میبره دیتا رو دیگه نه

واسه همینه که کد دستی شما جواب میده چون از squer1 بصورت مجزا استفاده کردید

موفق باشید.

mahdieh5
سه شنبه 18 مرداد 1390, 00:26 صبح
دوست عزیز کلاس مشتق شده فقط اعضای و آیتمهایی رو تو بیس مشخص کردید به ارث میبره دیتا رو دیگه نه

واسه همینه که کد دستی شما جواب میده چون از squer1 بصورت مجزا استفاده کردید

موفق باشید.

میشه لطف کنید کد درستش را بنویسید. من فکر میکنم به دلیل فراخوانی سازنده ها باشد. چون با ایجاد نمونه کلاس مشتق، ابتدا سازنده کلاس پایه فراخوانی میشود و مقادیر X و Y راصفر میکند و بعد سازنده کلاس مشتق فراخوانی میشود. به نظ ر شما دلیل من درسته؟

Esmail Solhkhah
سه شنبه 18 مرداد 1390, 00:36 صبح
فرمایشتون درسته

شما باید از کانسترکتور کلاس پایه ارث بری کنید

public class shape
{
private int x;
private int y;

public shape(int _x, int _y)
{
x = _x;
y = _y;
}
public int X
{
get
{
return x;
}
set
{
x = value;
}
}

public int Y
{
get
{
return y;
}
set
{
y = value;
}
}

public virtual int area()
{
return (X * Y);
}

public virtual int prime()
{
return (X + Y);
}
}

public class squer1 : shape
{
private int z;

public squer1(int x , int y)
: base( x, y)
{
}

public int Z
{
get
{
return z;
}
set
{
z = value;
}
}
public override int area()
{
return (X * Y * Z);

}
public override int prime()
{
return (X + Y) + Z;
}
}


private void button1_Click(object sender, EventArgs e)
{
int x= Convert.ToInt32(textBox3.Text);
int y = Convert.ToInt32(textBox4.Text);

shape sh = new shape(x,y);



squer1 t1 = new squer1(x,y);

t1.Z = Convert.ToInt32(textBox5.Text);

textBox1.Text = t1.prime().ToString();
textBox2.Text = t1.area().ToString();
}

موفق باشید.