0 امتیاز
سلام ببخشید من  pdf و اموزش های ویدیویی سی شارپ سایت شما رو خریداری کردم.در مورد تعریف استاتیک متغیر ها و متدها در پی دی اف سوال برام ایجاد شده و به نظرم بهتر بود که از مولفان این مجموعه اموزشی بپرسم.در pdf اموزش سی شارب در مبحث "اعضای استاتیک" و در صفحه 181 گفته شده که متدهای استاتیک نمی توانند از فیلدها و خاصیت های غیر استاتیک ایجاد کنند و مثلا  برای استفاده از متد ()WritLine کلاس Console , باید یک نمونه از کلاس Console  ایجاد کنیم و با استفاده از ان نمونه به نمایش پیغام در مانیتور اقدام کنیم.ولی در مثال های متعدد در همین pdf اموزشی و برای مثال در نمونه که صفحه 125 درج شده , برنامه هایی که با متد استاتیک  ()Main تعریف شده اند از انواع مختلف فیلدها و متدهای غیر استاتیک و ازجمله متد ()WritLine کلاس Console , بدون ایجاد نمونه ای از متد استفاده می کنند.در حالی که طبق تعریف چون متد ()Main  استاتیک است باید این نمونه ها در هنگام اجرا با پیغام خطا مواجهبشوند.ممنون میشم که به این سوال من  پاسخ بدهید و مشخص کنید که چرا این اصل در هنگام نوشتن برنامه های متد استاتیک ()Main رعایت نمیشه؟

1 پاسخ

0 امتیاز

سلام دوست عزیز

تو آموزش ها گفتیم که متدهای استاتیک نمی تونن از فیلد ها و متدهای غیر استاتیک استفاده کنن. به عکس زیر توجه بفرمایید

 

اگه واقعا بخواین استفاده کنید کافیه کلمه static رو هم هنگام تعریف بذارین

:

برای استفاده از متد غیر استاتیک تو متد استاتیک باید یک نمونه از کلاس مثال بالا یعنی  Program  ایجاد و بعد متد method1 رو در داخل متد استاتیک Main استفاده کنیم . به شکل زیر

در مورد سوالتون که فرمودین چرا این قاعده در متد Main رعایت نمیشه هم عرض کنم که  رعایت شده. متد WriteLine یک متد استاتیک از کلاس استاتیک Console هست

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

چون هر دو استاتیکن

 

 

 

خیلی ممنونم از این که به تفصیل و با دقت جواب سوال من رو دادید.

با توجه به این عکس که از صفجه 181 pdf اموزش سی شارپ گرفتم , الان با توجه به توضیحات شما  اشکال من در متد ()WritLine کلاس Console , است که شما گفتین استاتیک است:

1- قرار بود که فقط در هنگام استفاده از متدهای غیر استاتیک داخل متد استاتیک , یک نمونه از کلاس دربرگیرنده اون متد غیراستاتیک ایجاد بشه .

2- در این عکس هم گفته شده متد استاتیک را نمی توان به وسیله نمونه ایجاد شده از کلاس ان متد فراخوانی کرد. و همچنین  گفته شده که متدهای غیر استاتیک می تونند از فیلد ها و متدهای استاتیک استفاده کنند.

پس چرا در مثالی که در همین عکس  اورده شده , با این که متد()WritLine کلاس Console  استاتیک است , ابتدا نمونه ای ازکلاس Console ساخته شده و سپس از متد  ()WritLine  استفاده شده.

 

 

 

توسط (101 امتیاز) 2

درسته حق با شماست، البته اگه درست منظوتون رو متوجه شده باشم. شاید بهتر بود مثال زیر رو میزدم تا شما تو اشتباه نیوفتین.

 

"اگر از کلمه static در متد و کلاس استفاده نکنیم، باید یک شی از کلاس ایجاد و با استفاده از شیء به متد دسترسی پیدا کنیم"

به مثال زیر توجه کنید

using System;

class SampleClass
{
    public void ShowStaticMessage()
    {
        Console.WriteLine("My Message!");
    }
}

class Program
{
    public static void Main()
    {
        SampleClass display = new SampleClass();
        display.ShowStaticMessage();
    }
}

البته من این پست رو 3-4 روز آینده آپدیت می کنم و با مثال های ساده تری توضیح میدم و خبرتون می کنم.

توسط (6,480 امتیاز) 6 17 129
این رو هم اضافه کنم که شما اون 3 خط رو کلا بیخیال شین چون مثال اشتباهیه!
توسط (6,480 امتیاز) 6 17 129

خیلی ممنونم .توضیحاتتون جامع و  عالی بود.نحوه پاسخگویی به سوالات در بخش انجمن هم مثل سایت و روش اموزشی موثرتون بی نظیر و جذابه .سطح کیفیت و عملکرد سایت و انجمن شمابه مراتب بهتر و باکیفیت تر از سایت های فارسی زبان دیگر است که در زمینه اموزش نامه نویسی فعالیت می کنند  و واقعا جای تقدیر و تشکر داره.yesyesyesyesyes

توسط (101 امتیاز) 2
بسیار بسیار ممنون نظر لطفتونه
توسط (6,480 امتیاز) 6 17 129
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...