PDA

View Full Version : سطح دسترسي در Constructor



اوبالیت به بو
چهارشنبه 29 آبان 1387, 12:03 عصر
سلام
به كد زير توجه كنيد:


class add
{
int i, j;
public add(int I, int J)
{
i=I;
j = J;
sum();
}
private void sum()
{
int k = i + j;
MessageBox.Show(k.ToString ());
}
}
private void button1_Click(object sender, EventArgs e)
{
int m = int.Parse(textBox1.Text);
int n = int.Parse (textBox2 .Text );
object obj = new add(m, n);
}





كاملاً مشخص هستش كه چه كاري انجام شده. به اون كلمه Public كه قرمزش كردم دقت كنيد.چرا وقتي اون رو Private مي كنم برنامه پاسخ اشتباه رو به من مي ده؟
يك نفر من رو از خواب جهل و ناداني بيدار كنه.

sinpin
چهارشنبه 29 آبان 1387, 12:45 عصر
سلام
به كد زير توجه كنيد:


classadd
{
int i, j;
public add(int I, int J)
{
i=I;
j = J;
sum();
}
privatevoid sum()
{
int k = i + j;
MessageBox.Show(k.ToString ());
}
}
privatevoid button1_Click(object sender, EventArgs e)
{
int m = int.Parse(textBox1.Text);
int n = int.Parse (textBox2 .Text );
object obj = newadd(m, n);
}

كاملاً مشخص هستش كه چه كاري انجام شده. به اون كلمه Public كه قرمزش كردم دقت كنيد.چرا وقتي اون رو Private مي كنم برنامه پاسخ اشتباه رو به من مي ده؟
يك نفر من رو از خواب جهل و ناداني بيدار كنه.

متودی که مشخص کردید یک کانستراکتور است و اگه private باشه نمیتونید از خارج از کلاس نمونه سازی کنید. مشکل کجاست ؟

اوبالیت به بو
چهارشنبه 29 آبان 1387, 13:09 عصر
ممنون از توجه و پاسختون.

اگه private باشه نمیتونید از خارج از کلاس نمونه سازی کنید
چرا؟

مشکل کجاست ؟
در محاسبه سود سالانه هستش كه مي خوام ورودي ها رو از خارج كلاس بدم.

masoud_parsa
چهارشنبه 29 آبان 1387, 14:07 عصر
مشكل اينه شما اگه توي يك كلاس متدي رو private تعريف كنيد وقتي كه از كلاس شي تعريف مي كنيد به اون متد دسترسي نداريد.واسه همين وقتي كانستراكتور رو private تعريف كني نمي توني ازش شي بسازي

اوبالیت به بو
چهارشنبه 29 آبان 1387, 22:16 عصر
چرا؟

علتش رو فهميدم. وقتي obj مي خواد از كلاس add خودش رو new كنه اول به سراغ Constructor مي ره و چون Constructor نمي تونه به صورت Private متغيرهاي خارج از بلوك خودش رو مقدار دهي مي كنه مقداري رو نمي ده. ابته يه جا تو MSDN خوندم كه اين حالت به اين خاطر پيش مياد كه چون به صورت Static تعريف كرديم و يه مثال زده بود كه هيچي ازش نفهميدم. به هر حال...
يه چيزه ديگه هم فهميدم. اين خط كد رو :

object obj = newadd(m, n);
ميشه به اين صورت نوشت:

add obj = newadd(m, n);