PDA

View Full Version : چرا این برنامه کوچیک من ارور داره؟



nazanin20
جمعه 10 دی 1389, 20:07 عصر
نیگا این برنامه منو
میخام یه متغیر تعریف کنم که تمام متدهای کلاسم اونو بشناسن پس چرا نمیشناسن ؟


using System;
using System.Collections.Generic;
using System.Text;
namespace tst2
{
classProgram
{
public string x;

public static void Main()
{
x=Console.ReadLine();
Console.WriteLine(x);
tt();
}
public static void tt()
{
x=Console.ReadLine();
Console.WriteLine(x);
}
}
}


محیط برنامه کنسوله

nazanin20
جمعه 10 دی 1389, 20:45 عصر
بچه هااااااااااا
وقتی اینجوری مینویسم ارور نمیده


using System;
using System.Collections.Generic;
using System.Text;
namespace tst2
{
classProgram
{
public static string x;

publicstaticvoid Main()
{
x=Console.ReadLine();
Console.WriteLine(x);
tt();
}
publicstaticvoid tt()
{
x=Console.ReadLine();
Console.WriteLine(x);
}
}
}

melika999
جمعه 10 دی 1389, 20:54 عصر
وقتي static تعريف ميكني هكه جا اونو ميشناسن:لبخند:

amir-yeketaz
جمعه 10 دی 1389, 21:06 عصر
دلیل اصلی اینه که وقتی شما یه متد یا حتی یه کلاس رو استاتیک تعریف میکنید باید تمام اعضایی که داخل اون استفاده میشه استاتیک باشه ...

موفق باشید

nazanin20
جمعه 10 دی 1389, 21:10 عصر
بچه ها اینجوریم درست در میاد و اجرا میشه ولی نمیدونم چرا یه ارور داره
Error 1 Program 'J:\CONSOL-C#\tst2\tst2\tst2\obj\Debug\tst2.exe' does not contain a static 'Main' method suitable for an entry point tst2
:

کل استاتیکارو برداشتم !!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟


using System;
using System.Collections.Generic;
using System.Text;
namespace tst2
{

classProgram
{
public string x;

public void Main()
{
x=Console.ReadLine();
Console.WriteLine(x);
tt();
}

public void tt()
{
x = Console.ReadLine();
Console.WriteLine(x);

}

}
}


این استاتیک کاربردش چیه ؟ چرا بعضی جاها نوشته که لازم مین برنامه ت داشته باشه؟

amir-yeketaz
جمعه 10 دی 1389, 21:27 عصر
این استاتیک کاربردش چیه ؟

کاربردهای زیادی داره!!!
همین Console.Readline() که میزنین در واقع متد ReadLine استاتیک هست که شما میتونی بدون اینکه از کلاس کنسول شی بسازی ازش استفاده کنی!!!!

nazanin20
جمعه 10 دی 1389, 22:46 عصر
بچه ها اینجوریم درست در میاد و اجرا میشه ولی نمیدونم چرا یه ارور داره
Error 1 Program 'J:\CONSOL-C#\tst2\tst2\tst2\obj\Debug\tst2.exe' does not contain a static 'Main' method suitable for an entry point tst2
:

کل استاتیکارو برداشتم !!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟


using System;
using System.Collections.Generic;
using System.Text;
namespace tst2
{

classProgram
{
public string x;

public void Main()
{
x=Console.ReadLine();
Console.WriteLine(x);
tt();
}

public void tt()
{
x = Console.ReadLine();
Console.WriteLine(x);

}

}
}


این استاتیک کاربردش چیه ؟ چرا بعضی جاها نوشته که لازم مین برنامه ت داشته باشه؟






یعنی این برنامه ای که نوشتم و توش از استاتیک استفاده نکردم
بخاطر نبود استاتیک بوده که ارور میداده ؟
چون شی ای ازش نساخته ام و دارم ازش استفاده میکنم ؟
به این علت بوده یعنی ؟
یعنی حالا که من شی نساختم باید الزاما از استاتیک استفاده کنم ؟
1کم بیشتر توضیح بدین ممنون میشم من !

amir-yeketaz
جمعه 10 دی 1389, 23:00 عصر
خواهر من!!! شما الان تو کلاس Program هستی ... پس تو اینجا کلاسی وجود نداره که ازش شی بسازی !!!! تو کلاس Program شما یه فیلد public از نوع string ساختین به نام x و یه متد استاتیک Main که نقطه ی شروع برنامس! و یه متد public ...
حالا دیگه مشکلتون چیه من نمیدونم!!!!
پیشنهاد میکنم کمی بیشتر در مورد شی گرایی و همین طور مباحث مربوط به استاتیک مطالعه کنید!!!
چون این سوالاتتون خیلی ابتدایی هست و تو این فروم هم به اندازه ی کافی در موردش بحث شده!!!


موفق باشید

georgiaro
جمعه 10 دی 1389, 23:28 عصر
سلام
هر متد و یا متغیری که استاتیک تعریف بشه بدون نمونه گیری از کلاس قابل استفادست مثلا کلاس زیر


class test
{
public static int a;
public int b;
}

متغیر a متعلق به کلاس test هستش و اینجوری فراخوانی میشه test.a
ولی b متعلق به شی هستش و حتما باید برای دسترسی بهش شی ای وجود داشته باشه


test instance = new test();
instance.b;

خوب امید وارم تا اینجا کاربرد استاتیک مشخص شده باشه.
متد main باید استاتیک باشه تا بشه بدون نمونه سازی از کلاس program برنامه رو اجرا کرد.(البته اجرای برنامه کار شما نیست)
پس وقتی متد main رو از حالت استاتیک در میارید دیگه برنامه اجرا نمیشه.
حالا چرا متغیر عمومی غیر استاتیک رو توی main دسترسی نداریم؟
به این خاطر که متغیر های عمومی غیر استاتیک متعلق به شی هست نه کلاس و تا زمانی که شی و جود نداشته باشه اونها هم وجود ندارن ولی main چون استاتیکه متعلق به کلاسه و احتاجی به شی نداره.

امیدوارم تونسته باشم موضوع رو ساده بیان کنم.

nazanin20
شنبه 11 دی 1389, 20:38 عصر
سلام
هر متد و یا متغیری که استاتیک تعریف بشه بدون نمونه گیری از کلاس قابل استفادست مثلا کلاس زیر


class test
{
public static int a;
public int b;
}

متغیر a متعلق به کلاس test هستش و اینجوری فراخوانی میشه test.a
ولی b متعلق به شی هستش و حتما باید برای دسترسی بهش شی ای وجود داشته باشه


test instance = new test();
instance.b;

خوب امید وارم تا اینجا کاربرد استاتیک مشخص شده باشه.
متد main باید استاتیک باشه تا بشه بدون نمونه سازی از کلاس program برنامه رو اجرا کرد.(البته اجرای برنامه کار شما نیست)
پس وقتی متد main رو از حالت استاتیک در میارید دیگه برنامه اجرا نمیشه.
حالا چرا متغیر عمومی غیر استاتیک رو توی main دسترسی نداریم؟
به این خاطر که متغیر های عمومی غیر استاتیک متعلق به شی هست نه کلاس و تا زمانی که شی و جود نداشته باشه اونها هم وجود ندارن ولی main چون استاتیکه متعلق به کلاسه و احتاجی به شی نداره.

امیدوارم تونسته باشم موضوع رو ساده بیان کنم.

با تشکر از توضیحاتتون
میشه یه منبع در این باره معرفی کنید
ممنونم

georgiaro
شنبه 11 دی 1389, 23:21 عصر
این مباحث مربوط به اصول شی گراییه پس هر جا که در این مورد توضیح داده باشه مبحث استاتیک هم توشه.
موفق باشید.