PDA

View Full Version : static در زبان C



alireza_tavakol
شنبه 21 مهر 1386, 01:06 صبح
برنامه نویسان که پیر دیر هستند کسی هست که بدونه قضیه static در زبان C چی بوده
سوال من اینه که چه طوری میشه متغییری که استاتیک تعریف میشود در C را در زبان #C پیاده سازی کرد

اَرژنگ
شنبه 21 مهر 1386, 01:28 صبح
http://barnamenevis.org/forum/showpost.php?p=406053&postcount=3



private static Form1 _coreForm;

alireza_tavakol
یک شنبه 22 مهر 1386, 00:47 صبح
من هنوز جواب نگرفتم
لطفا زیر دیپلم صحبت کنید

اَرژنگ
یک شنبه 22 مهر 1386, 02:28 صبح
من هنوز جواب نگرفتم
لطفا زیر دیپلم صحبت کنید
برنامه‌نویسی بالا و پائین دیپلم نداره، مگر طرز تعریف یک متغییر استاتیک را در سی‌شارپ نخواستید؟ اصلا با کد کار کردید؟ برایه نیم خط کد که نمیشه ساده تر نوشت؟ بیزحمت وقتی که میگید جواب نگرفتید یک و یا دوخط ("دوخت" بود تصحیح شد ، با تشکر از night_fall2 (http://barnamenevis.org/forum/member.php?u=47458)) هم مرحمت کنید که از چه لحاظ مشکل دارید.
هر چی سوال را دقیقتر توظیح بدید بقیه هم میتوانند جواب دقیقتر بدهند.

alireza_tavakol
دوشنبه 23 مهر 1386, 01:19 صبح
من منظورم از متغییر استاتیک این بود که وقتی یک کلاس استاتیک دارم و در داخل اون کلاس استاتیک متدی استاتیک تعریف میکنم و در داخل اون متد متغییری رو تعریف میکنم

int i = 10;
و بعد توی اون متد مقدار متغییر i رو دو واحد افضایش میدم .
در مرحله بعدی که متد استاتیک تعریف شده از کلاس استاتیک رو صدا میزنم مجدد مقدار متغییر i مساوی 10 نشود و این بار از همان اول مقدار متغییر i مساوی 12 باشد و بعد اضافه شدن اون دو واحد مقدار i مساوی 14 بشه

اگه کسی با زبان C آشنا باشه منظور منو خوب میفهمه

اَرژنگ
دوشنبه 23 مهر 1386, 02:27 صبح
خوب چرا این متغییر را خارج متد تعریف نمیکنید؟
در ضمن سعی نکنید همه چی را همان طور که در سی باهاش کار میکردید کار کنید. مفاهیم سی شارپ را یاد بگیرید و مستقیما با روشهایه سی شارپ کار کنید زندگی آسان تر میشه.

Mahdi.Kiani
دوشنبه 23 مهر 1386, 07:16 صبح
یک و یا دوخت

یک و یا دوخت === یک یا دو خط !!! :بامزه:

PC2st
دوشنبه 23 مهر 1386, 19:54 عصر
من منظورم از متغییر استاتیک این بود که وقتی یک کلاس استاتیک دارم و در داخل اون کلاس استاتیک متدی استاتیک تعریف میکنم و در داخل اون متد متغییری رو تعریف میکنم
دوست عزیز چنین چیزی در سی شارپ امکان پذیر نیست... ولی در VB.NET امکان پذیره.

alireza_tavakol
دوشنبه 23 مهر 1386, 20:30 عصر
متاسفانه من باور نمی کنم که زبان #C از انجام این کار عاجز باشد در صورتی که جد بزرگوارش توان انجام این کار را داشته باشد
در ثانی اگر امکان انجام این کار مهال است علت چیست آیا دلیل منطقی خاصی وجود دارد؟
ثالثا چرا VB.NET می تواند انجام دهد وای #C نمی تواند این دو زبان که توسط یک شرکت و توسط یک IDE و با هسته ای یکسان هستند

جناب آقای ارژنگ خان من هر وقت مثالی عرض میکنم شما سریع یه نسخه ای واسه مثال من می پیچید و لی مشکل رو حل نمی کنید البته سپاس گذارم از لطف شما ولی من سوالم شناسایی مفاهیم می باشد و برای درک بهتر مسئله مثالی عرض کردم

در ضمن سعی نکنید همه چی را همان طور که در سی باهاش کار میکردید کار کنید. مفاهیم سی شارپ را یاد بگیرید و مستقیما با روشهایه سی شارپ کار کنید زندگی آسان تر میشه.
از نصیحت و توصیه جناب عالی بسیار متشکرم

اَرژنگ
سه شنبه 24 مهر 1386, 14:27 عصر
متاسفانه من باور نمی کنم که زبان #C از انجام این کار عاجز باشد در صورتی که جد بزرگوارش توان انجام این کار را داشته باشد



۱) سی یک زبان غیره قشیگراست، سی شارپ زبان شئی گراست، همانطوری که در http://barnamenevis.org/forum/showthread.php?t=81358 (http://barnamenevis.org/forum/showthread.php?t=81358) گفتم طراحان سی شارپ صلاح ندیدند تمام خصوصیات سی را در سی شارپ داشته باشند. در ثانی در سی شارپ باید با مفاهیم شئی گرائیی کار کنید. تبدیل کد از سی کمله به کمله به سی شارپ کاره درستی نیست و بعضی مفاهیم از یک زبان به یک زبان دیگر قابل ترجمه نیستند (همانطوری که در زبان آدمیزاد هم نمیشه از یک زبان به یک زبان دیگر کلمه به کلمه ترجمه کرد )



در ثانی اگر امکان انجام این کار مهال است علت چیست آیا دلیل منطقی خاصی وجود دارد؟
ثالثا چرا VB.NET می تواند انجام دهد وای #C نمی تواند این دو زبان که توسط یک شرکت و توسط یک IDE و با هسته ای یکسان هستند


همانطوری که در http://barnamenevis.org/forum/showthread.php?t=81358 (http://barnamenevis.org/forum/showthread.php?t=81358) گفتم طراحان هر زبان هر چی را که صلاح نبینند ور میدارند.
امکان چه کاری مهال است؟ نوشتن برنامه نویسی غیره شئیگرا در یک زبان شئیگرا مفهوم و معنی ندارد. اگر به روش شئیگرا فکر کنید به راحتی میشه همان کار را انجام داد.



جناب آقای ارژنگ خان من هر وقت مثالی عرض میکنم شما سریع یه نسخه ای واسه مثال من می پیچید و لی مشکل رو حل نمی کنید البته سپاس گذارم از لطف شما ولی من سوالم شناسایی مفاهیم می باشد و برای درک بهتر مسئله مثالی عرض کردم

کدام مثال؟ اگر ممکن است جایی که کد را فرستادید را لینک بدید که درستش کنیم. برایه درک کردن مفاهیم بهترین کار کار کردن با کد است، من میتوانم کلی درباره مفاهیم که شما سوال میکنیدبنویسم ولی اگر کده بخصوصی را که مورد نظرتان هست را بفرستید میتوانید هم جواب دقیق بگیرید و هم نحوه استفاده مفاهیم شئیگرائی را هم ببینید.

در ضمن سوالهایتان بجاست، ولی باید قبول کنید که در دنیا هیچ چی کامل نیست، همه چی منطق ۱۰۰% درست ندارد. اینکه وی‌بی دات نت قابلیت چیزی را دارد و سی شارپ ندارد از حقیقت واقعیت چیزه بیشتری لازم نمیشه باشد. اگرچه منطقتان را درک میکنم ولی حقیقت چیزه دیگریست. میتوانید منطقا یک چیزی را قبول نداشته باشید ولی حقیقتا باید باهاش کنار بیاید.
اگر این کد مورد نظرتان را بفرستید به جایه خواندن فلسفه من یک جواب دقیقتر میگرید.
اگر ممکن است تا جایی که میوانید کدتان را در سی شارپ بنویسید و اینکه انتظار دارید در چه خطی چه اتفاق بیافتد را هم بفرستید.
من نمیخوام نصیحت کنم، ترجیح میدم مشکلتان رابا ۳ خط ‌کد حل کنم تا اینکه ۲۰ خط انشا بنویسم :)

PC2st
سه شنبه 24 مهر 1386, 16:22 عصر
در ثانی اگر امکان انجام این کار مهال است علت چیست آیا دلیل منطقی خاصی وجود دارد؟
فرض کنیم که اگر چنین قابلیتی در سی# وجود داشت:


class Simple
{
static int c00 = 0;

public void Goal()
{
static int c99 = 0;
c99++;
}
}

قبول دارید که زمان نابودی متغیر c99 برابر زمان نابودی متغیر c00 است؟

وجود متغیر c99 روی کلاس Simple تاثیر گذار است... در حالیکه کلاس Simple از وجود متغیر c99 بی اطلاع است! و این از نظر سی# بی معنا خواهد بود. برخلاف VB.NET و سی++، در سی# فقط میتوان بصورت شیئ گرا نوشت و غیر از آن امکان پذیر نیست (هر زبان برنامه نویسی یک هدف خاص رو دنبال میکنه).
متغیر c99 رفتاری شبیه به اشیاء نداره، چون مثلا وقتی شیئ x در محدوده A ایجاد میشود، به این معنی است که شیئ x در محدوده A زندگی میکند و محدوده A باید از وجود شیئ x مطلع باشه در غیر اینصورت چیزی فراتر از ماورای طبیعی اشیاء خواهد بود! (یعنی غیر قابل قبول!). در حال حاضر، شیئ c99 در محدوده کلاس Simple زندگی میکند ولی کلاس Simple از وجود آن اطلاعی نداره، پس از دیدگاه اشیاء، غیر قابل توجیه خواهد بود.
مثلا در نظر بگیرید که نمیدونید شما چهار تا دست دارید! (شما = کلاس Simple) (دو دست اضافی = شیئ c99)

alireza_tavakol
سه شنبه 24 مهر 1386, 23:50 عصر
به خدا حقت که بهت بگم خدای برنامه نویسی
این قدر کلمات و جملات منطقی و واضح است که زبان من قاصر از هر گونه تعریف می باشد
من قانع شودم و جواب خودم رو گرفتم
اما یه سوال جزیی این طوری که من از جواب و مثال شما برداشت کردم
++C و VB.NET دارن یه جورایی غیر منطقی عمل میکنند آیا شما هم صریحا به این نکته اعتقاد دارین

PC2st
چهارشنبه 25 مهر 1386, 22:03 عصر
از اظهار لطفتون ممنونم :-)
چون سی++ و VB.NET اجازه نوشتن بصورت غیر شیئ گرا را میدهند، نمیتونیم بگیم که این زبانها غیر منطقی رفتار میکنند، چون نوشتن کد بصورت غیر شیئ گرا، جزئی از خصوصیات این زبانهاست. از این نظر درست میگید که اینکار غیر منطقی است اما از دیدگاه سی# غیر منطقی است ولی از دیدگاه سی و سی++، کاملا منطقی خواهد بود.
با توجه به اینکه، زبان سی اصولا شی گرا نیست پس استفاده از روشهای شیئ گرا نامفهوم خواهد بود و همچنین، این جزئی از خصوصیات سی++ است که بتوان برنامه نویسی غیر شی گرا را در کنار برنامه نویسی شی گرا انجام داد.
VB.NET هم از جدش الهام میگیرد که جدش Visual Basic است، که Visual Basic هم شیئ گرا نبوده است.
و چون سی# تازه متولد است، پس از همان اول فقط بر پایه اصول شی گرایی طراحی شده است. فکر کنم جاوا هم شیئ گرای خالص باشد مثل سی#... البته من با زبان جاوا آشنایی ندارم و از این گفته ام مطمئن نیستم و فقط آنرا شنیده ام :-)

alireza_tavakol
پنج شنبه 26 مهر 1386, 00:27 صبح
با تشکر از کلیه دوستانی که در بحث مذکور شرکت کرده اند بخصوص PC2st.ir عزیز که جواب نهایی را داد
من موضوع را کامل درک کردم و به عمق فاجعه پی بردم و هیچ گونه پرسش در این زمینه ندارم
البته همان طور که جناب آقای ارژنگ خان فرمودند این موضوع از نظر کاربردی ارزشی نداشت ولی برای من از نظر مفهومی جالب بود

فکر کنم جاوا هم شیئ گرای خالص باشد من یه کم جاوا بلدم و این کفته شما رو تایید میکنم ( البته من کیم که جمله شما رو تایید یا رد کنم )