گفتگو هایی در باب سی شارپ

SU-57

Member
سلام آقا سجاد
می شه کد قسمت رویداد این کد رو بنویسی طوری که توی پنجره دیالوگ، با یک بار کلیک روی باتون، اعداد 5 و 10 به صورت زیر هم نشون داده بشن. این متد رو نوشتی ولی روش نمایش دادنش یادت رفت بزاری. من یادم نیست که توی آرایه ها این مطلب رو گفته باشی که چطوری تو مقدار آرایه با return برگشت داده می شه. لطفا کدهای تو در تو ننویس منطورم توی MessageBox.show هستش. چون از هر ظرف 4 تا پرانتز بزاری آدم گیج می شه :rose:

کد:
int[] method1()
{
    return new int[] { 5, 10 };
}
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام آقا سجاد
می شه کد قسمت رویداد این کد رو بنویسی طوری که توی پنجره دیالوگ، با یک بار کلیک روی باتون، اعداد 5 و 10 به صورت زیر هم نشون داده بشن. این متد رو نوشتی ولی روش نمایش دادنش یادت رفت بزاری. من یادم نیست که توی آرایه ها این مطلب رو گفته باشی که چطوری تو مقدار آرایه با return برگشت داده می شه. لطفا کدهای تو در تو ننویس منطورم توی MessageBox.show هستش. چون از هر ظرف 4 تا پرانتز بزاری آدم گیج می شه :rose:

کد:
int[] method1()
{
    return new int[] { 5, 10 };
}

سلام
بعد از هر بار خوندنِ اعضای آرایه ، یه n\ اضافه میکنید . کار خاصی نداره .

C#:
            int[] myArray = method1();
            string listShow = "";
            foreach (int item in myArray)
            {
                listShow += item.ToString() + "\n";
            }
            MessageBox.Show(listShow);
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد ، میگم این ویژال استودیو ، رفت روی نسخه ی 16.10
سال های قبل ، تا نسخه ی 0.9 میرفت . مثلا 15.9 میرفت و در نسخه ی بعدی ، سراغ نسخه ی 16 که واسه ی سال جدید بود میرفت .
پس چه زمانی میخواد نسخه ی visual studio 2021 که همون نسخه ی 17 هست را بده؟!
یا قصدِ دادنِ نسخه ی 2021 را نداره و نسخه ی 2022 را در سال بعد میخواد بده؟


چون از زمانی که نسخه ی preview ی 2021 را بده تا اینکه نسخه ی final اش را بده (و مخصوصا باگ های اولیه اش را رفع کنه در آپدیت های جزئیِ نسخه ی final) چیزی حدود حداقل 3 ماه تا 6 ماه زمان میبره (برای نسخه ی 2019 یعنی نسخه ی 16.0 که این طور بوده) .
همین الانش حدود 3 ماه از 2021 گذشت . همین الان هم نسخه ی preview ی 2021 را بزنه ، تقریبا 3 ماه آخرِ 2021 نسخه ی 17.0 فینال میاد .
تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد ، میگم این ویژال استودیو ، رفت روی نسخه ی 16.10
سال های قبل ، تا نسخه ی 0.9 میرفت . مثلا 15.9 میرفت و در نسخه ی بعدی ، سراغ نسخه ی 16 که واسه ی سال جدید بود میرفت .
پس چه زمانی میخواد نسخه ی visual studio 2021 که همون نسخه ی 17 هست را بده؟!
یا قصدِ دادنِ نسخه ی 2021 را نداره و نسخه ی 2022 را در سال بعد میخواد بده؟
این Visual Studio 2021 کی تبلیغ شده بود که حالا ارائه اش به تاخیر افتاده باشه؟ شاید شما دلتون بخواد که Visual Studio 2021 ای باشه ولی مایکروسافت بصورت رسمی همچین محصولی رو در Roadmap اش اعلام نکرده بود. در ضمن هر پروژه ای میتونه بخاطر انواع مسائل به تاخیر بیافته، کنسل بشه و الزامی نداره که حتما با همون اسم ارائه بشه، ممکنه موقع ارائه اسم یا نسخه اش تغییر کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .
استاد ، میگم یه IDE هست برای .net به نام Rider .
سایتِ خوبی برای مقایسه ی این نرم افزار با Visual Studio پیدا نکردم .
جز سایت رسمیِ سازنده ی Rider که jetbrains هست و مشخصه که نقاط قوت خودش را بیشتر تمرکز میکنه برای مقایسه :


یه سایت واقعی برای مقایسه ی Rider و Visual Studio که دور از تعصب مقایسه کنه ، میدونید (و لینکش را میدید) ؟

و نظر شما درباره ی مقایسه ی این دو نرم افزار چیه؟
این طور که بعضی سایت ها (ی انگلیسی) میگن (که البته بیشتر نظر شخصی نویسنده انگار هست) ، گاها Rider را قویتر از Visual Studioجلوه میدن . و حداقلش میگن که در بعضی موارد ، چندان ضعیف تر نیست و در بیشتر موارد ، برابر یا قویتر هست .

تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، میگم یه IDE هست برای .net به نام Rider .
سایتِ خوبی برای مقایسه ی این نرم افزار با Visual Studio پیدا نکردم .
جز سایت رسمیِ سازنده ی Rider که jetbrains هست و مشخصه که نقاط قوت خودش را بیشتر تمرکز میکنه برای مقایسه :


یه سایت واقعی برای مقایسه ی Rider و Visual Studio که دور از تعصب مقایسه کنه ، میدونید (و لینکش را میدید) ؟

و نظر شما درباره ی مقایسه ی این دو نرم افزار چیه؟
از مقایسه ایندو قوی و ضعیف مشخص نمیشه، هر دوشون IDE هستند ولی ابعادشون با هم نمیخونه. همانطور که Paint و Photoshop هر دو نرم افزار طراحی و ویرایش تصویر هستند ولی ابعادشون با هم جور در نمیاد.
از مقایسه اینجور موارد فقط یک سوال در میاد، "سبک با امکانات کمتر" یا "سنگین با امکانات بیشتر"؟ در یک سطح نیستند که قوی و ضعیف مشخص بشه.

ویژوال استدیو یک IDE خیلی مجهز و تمام عیار ئه که طبعا سنگین تره، Rider یک IDE سبک بر پایه IntelliJ IDEA ئه که بخاطر سبک بودنش روی سیستم های ضعیف که ویژوال استدیو مخصوصا با ReSharper بیش از حد کند میشه کارکرد بهتری داره. البته اگر کسی دنبال IDE سبک باشه هم الزاما Rider رو نمی تونه انتخاب کنه چون یک نقطه ضعف داره که روی ویندوز های 32 بیتی قابل نصب نیست.

این طور که بعضی سایت ها (ی انگلیسی) میگن (که البته بیشتر نظر شخصی نویسنده انگار هست) ، گاها Rider را قویتر از Visual Studioجلوه میدن . و حداقلش میگن که در بعضی موارد ، چندان ضعیف تر نیست و در بیشتر موارد ، برابر یا قویتر هست .
ملاک مقایسه هر چیز جزئی میتونه باشه اما از این ملاک های جزئی نتیجه گیری کلی در نمیاد. شما می توانید ده تا ملاک انتخاب کنید که در هر ده تا x بر y برتری داره، اما نمی توانید نتیجه بگیرید که پس x قوی تر از y ئه. ممکنه صد تا ملاک دیگه باشه که نقطه قوت y باشه یا اصلا هزار تا ملاک دیگه هم x برتری داشته باشه. اصلا نمیشه از روی n ملاک نتیجه کلی گرفت که در کل چی قوی تره.
مثلا Paint از Photoshop سریعتر بالا میاد، حافظه کمتری لازم داره، ابزار ها و رسمش سریعتره و ... اینها همگی با توجه به سبک و ساده بودن Paint عادی و طبیعی است، اما از این ملاک های جزئی نمیشه نتیجه گرفت که پس در بیشتر موارد Paint از Photoshop قوی تره، میشه نتیجه گرفت که در اون ملاک های جزئی Paint برتری داره.
 

SU-57

Member
سلام به استاد علی و آقا سجاد

پیشاپیش عید نوروز 1400 رو به شما بزرگواران تبریک عرض می کنم و سال خوب و خوشی همراه با عافیت، تندرستی و خوشبختی رو برای شما و خانواده محترمتون آرزو می کنم.

کد زیر که در عکس مشخصه که مربوط به سی شارپ 7 است

a1.jpg

طبق گفته های آقا سجاد همیشه طرف راست تساوی در طرف چپ ریخته می شه و طبق این قاعده در خط دوم ref a اشاره می کنه به متغیر a که مقدارش 10 است و بعد این 10 به متغیر b نسبت داده می شه و اشاره می کنه. بعد در خط سوم مقدار متغیر b که 10 شده به 50 تغییر پیدا می کنه و موقع نشون دادن همون 50 نشون داده می شه.

اما الان مشکل من اینه که نمی دونم آخه چطور وقتی مقدار متغیر b در خط سوم به 50 تغییر پیدا کرده مقدار متغیر a هم 50 می شه و چطوری متغیر b روی متغیر a هم اثر میذاره که طبق چیزی که قبلا یاد گرفتم نباید اینجوری باشه
 

the_king

مدیرکل انجمن
سلام به استاد علی و آقا سجاد

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

مشاهده پیوست 113877

طبق گفته های آقا سجاد همیشه طرف راست تساوی در طرف چپ ریخته می شه و طبق این قاعده در خط دوم ref a اشاره می کنه به متغیر a که مقدارش 10 است و بعد این 10 به متغیر b نسبت داده می شه و اشاره می کنه. بعد در خط سوم مقدار متغیر b که 10 شده به 50 تغییر پیدا می کنه و موقع نشون دادن همون 50 نشون داده می شه.

اما الان مشکل من اینه که نمی دونم آخه چطور وقتی مقدار متغیر b در خط سوم به 50 تغییر پیدا کرده مقدار متغیر a هم 50 می شه و چطوری متغیر b روی متغیر a هم اثر میذاره که طبق چیزی که قبلا یاد گرفتم نباید اینجوری باشه
int a یک متغیر از نوع int ئه، مقدارش مال خودشه، یک حافظه int داره که میتونه داخلش 10 یا 50 رو نگهداره.
اما ref int b یک متغیر از نوع int نیست، ارجاعی به int است، b برای خودش یک حافظه int نداره، b نمیتونه هیچ int ای رو مستقلا نگهداری کنه، چه 10 و چه 50 داخل خود b نمیتونه ثبت بشه، b فقط میتونه به یک داده int ارجاع بده، یعنی بگه داده در فلان جا است.
برای همینه که فرضا نمیشه نوشت ;ref int b = 10 چون اون 10 یک داده مستقل ئه، ref int نمیتونه یک داده int مستقل برای خودش داشته باشه، باید به یک int مستقل مثل a ارجاع کنه، خودش حافظه ای برای نگهداری اون int نداره.
اون b الان شبیه یک اسم مستعار برای همون a شده، وقتی می نویسید a = 50 مقدار داخل a رو 50 می کنید و وقتی می نویسید b = 50 باز هم همچنان مقدار a رو 50 می کنید، مقدار خود b رو عوض نمی کنید چون b اصلا int نیست که بتونه مقدار 50 رو نگهداره.
 

sahar24

New Member
سلام خسته نباشید من در برنامه اندروید استدیو مشکلی برام پیش اومده با خطای زیر مواجه شدم نمی دونستم در کدوم پخش میتونم سوال کنم ممنون میشم اگر راهنمایی کنید2021-04-08_10-27-19.png
 

the_king

مدیرکل انجمن
سلام خسته نباشید من در برنامه اندروید استدیو مشکلی برام پیش اومده با خطای زیر مواجه شدم نمی دونستم در کدوم پخش میتونم سوال کنم ممنون میشم اگر راهنمایی کنیدمشاهده پیوست 113897
معمولا این خطا بخاطر عدم دسترسی به منابع اینترنتی است. رجوع شود به :
 

SU-57

Member
سلام

من دارم آموزش سی شارپ نگاه می کنم و همینجوری سوال برام به وجود میاد

1- می خوام ببینم راهی وجود داره که بشهمقدار متغیر a رو هر طوری شده نمایش بده

کد:
{
    int a = 10;
}
MessageBox.Show(a.ToString());

2- می خوام ببینم می شه عدد 0 پشت شماره تلفن نمایش داده بشه چون توی string میذارم underline ها رو هم نشون میده. می دونم که 0 پشت عدد بی ارزشه ولی می خوام نشون داده بشه. البته می تونم یک string با مقدار 0 ایجاد کنم و پشت شماره تلفن ها بزارم ولی می خواستم ببینم غیر از این روش ها به طور مستقیم امکان نشون دادن 0 پشت عدد وجود داره.

کد:
long a = 0912_125_6724;
MessageBox.Show(a.ToString());


3- استاد علی این کد دقیقه 1:44 در فیلم زیر خظا میده روش حلش ممکنه یا از اساس غیر ممکنه البته اگه کل ref ها رو برداریم درست می شه ولی با ref کار نمی کنه و ارور میده. (البته من لینک رو توی کد میذارم به خاطر سئوی سایت. اگه برای سئوی سایت مشکلی نداره لطفا بفرمایید که از این به بعد به صورت مستقیم قرار بدم)

کد:
https://uupload.ir/view/tzbq_a.mp4/
 

the_king

مدیرکل انجمن
سلام

من دارم آموزش سی شارپ نگاه می کنم و همینجوری سوال برام به وجود میاد

1- می خوام ببینم راهی وجود داره که بشهمقدار متغیر a رو هر طوری شده نمایش بده

کد:
{
    int a = 10;
}
MessageBox.Show(a.ToString());
خیر. اون a صرفا در همون محدوده بلوک کد مابین { و } تعریف شده، خارج از اون محدوده، a ای که به اون تعریف داخل بلوک ربط داشته باشه وجود نداره. و تنها در حالتی اون 10 به خارج از بدنه اون بلوک میتونه انتقال داده بشه که داخل همون بلوک به متغیری، فیلدی، مشخصه ای و کلا یک منبع داده دیگری کپی اش کنید، فرضا یک b ای بیرون از اون بلوک از قبل تعریف کرده باشید و ;b = a رو پیش از خروج از اون بلوک کد اجرا کنید، وگرنه به محض خروج از اون بلوک دیگه a و حافظه اش از دست میره.
2- می خوام ببینم می شه عدد 0 پشت شماره تلفن نمایش داده بشه چون توی string میذارم underline ها رو هم نشون میده. می دونم که 0 پشت عدد بی ارزشه ولی می خوام نشون داده بشه. البته می تونم یک string با مقدار 0 ایجاد کنم و پشت شماره تلفن ها بزارم ولی می خواستم ببینم غیر از این روش ها به طور مستقیم امکان نشون دادن 0 پشت عدد وجود داره.
در داده عددی مثل long که به هیچ وجه نمی توانید 0 بدون ارزش رو ذخیره کنید، جایی که نگهداریش کنه نداره. اما می توانید یک متد دلخواه ToString برای long بنویسید یا اگه از string استفاده می کنید یک تابع تبدیل خاص برای string بنویسید که در جایی که میخواهید اون مقدار تلفن رو نمایش بدهید با قالبی اینکار رو انجام بده که مطلوب شما است. یعنی فرضا 9123456789 رو در long ذخیره کنید ولی متد تبدیلش به string رو طوری بنویسید که به رشته 6789 345 0912 تبدیلش کنه.
3- استاد علی این کد دقیقه 1:44 در فیلم زیر خظا میده روش حلش ممکنه یا از اساس غیر ممکنه البته اگه کل ref ها رو برداریم درست می شه ولی با ref کار نمی کنه و ارور میده. (البته من لینک رو توی کد میذارم به خاطر سئوی سایت. اگه برای سئوی سایت مشکلی نداره لطفا بفرمایید که از این به بعد به صورت مستقیم قرار بدم)

کد:
https://uupload.ir/view/tzbq_a.mp4/
مشکلی از نظر سئو وجود نداره. مشکل پیچیده ای نیست، فرض کنید که همچین کدی دارید :
C#:
            int a = 10;
            ref int b = a;
ایراد این کد بالا چیه؟ اینه که مقداری که در سمت راست داخل b قرار میگیره باید ref int باشه، نه int
a چی بود؟ یک int. ما که نمی توانیم مقدار int رو داخل ref int قرار بدهیم، پس باید بین a و = یک ref قرار بدهیم تا ref اش در b قرار بگیره :
C#:
            int a = 10;
            ref int b = ref a;
باز یک مثال دیگه، فرض کنید همچین کدی داریم :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = b;
ایراد در مقدار دهی c وجود داره، چون c یک ref int ئه و b به تنهایی مقدار a رو بر میگردونه، یعنی 10 که یک int ئه رو میخواد داخل c قرار بده که نمیشه.
اشکال مشابه مثال قبلی است، ایراد میگیره که چرا در سمت راست = اون کلمه کلیدی ref از قلم افتاده، با اضافه کردن اون ref مشکل حل میشه :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = ref b;
حالا بریم سراغ اون کدی که شما بهش اشاره می کنید :
C#:
        private void button78_Click(object sender, EventArgs e)
        {
            ref int a = Method16();
        }

        ref int Method16()
        {
            int[] a = new int[] { 10 };
            a[0] = 50;
            return ref a[0];
        }
روی اینکه داخل ()Method16 چی نوشته شده تمرکز نکنید، فقط به این توجه کنید که مقدار بازگشتی از ()Method16 از چه نوعی است؟ ref int، خوب الان اشکال این کد شبیه همون مثالی است که من زدم :
C#:
            ref int a = Method16();
میخواد بدون اینکه در سمت راست = از ref استفاده کنه مقدار int ای که ()Method16 بهش ارجاع داده رو داخل a قرار بده، خوب نمیشه. باید در سمت راست = ئه ref باشه :
C#:
        private void button78_Click(object sender, EventArgs e)
        {
            ref int a = ref Method16();
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = b;
ایراد در مقدار دهی c وجود داره، چون c یک ref int ئه و b به تنهایی مقدار a رو بر میگردونه، یعنی 10 که یک int ئه رو میخواد داخل c قرار بده که نمیشه.
اشکال مشابه مثال قبلی است، ایراد میگیره که چرا در سمت راست = اون کلمه کلیدی ref از قلم افتاده، با اضافه کردن اون ref مشکل حل میشه :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = ref b;

سلام استاد .
استاد ، یعنی وقتی مینویسیم ref int b ، این b ئه ، در واقع int هه و اشاره ای به اشاره گرها نداره مگر اینکه ref را همراش بیاریم؟

اگه جوری میکردن که وقتی یه متغییری از نوعِ ref ئه نوعی دیگه بود (مثل متغییر b که گفتید) ، وقتی این متغییر را توی متغییرِ ref ئه دیگه بخوایم بریزیم (متغییر c که گفتید) ، دیگه کلمه ی ref را نذاریم ، خیلی بهتر و خواناتر میشد چون ref را برای متغییر b ، زمانی که میخواستیم متغییر b را تعریف کنیم ، گذاشته بودیم دیگه .

تشکر استاد .
 

the_king

مدیرکل انجمن
سلام استاد .
استاد ، یعنی وقتی مینویسیم ref int b ، این b ئه ، در واقع int هه و اشاره ای به اشاره گرها نداره مگر اینکه ref را همراش بیاریم؟
خود b هیچوقت int نیست ولی اینکه اگر بدون ref همراهش استفاده اش کنید مقدار int بر میگردونه درسته.
برنامه نویس بر اساس اینکه اون ref رو بنویسه یا ننویسه میتونه تصمیم بگیره که ارجاع رو میخواد یا مقدار رو.
اگه جوری میکردن که وقتی یه متغییری از نوعِ ref ئه نوعی دیگه بود (مثل متغییر b که گفتید) ، وقتی این متغییر را توی متغییرِ ref ئه دیگه بخوایم بریزیم (متغییر c که گفتید) ، دیگه کلمه ی ref را نذاریم ، خیلی بهتر و خواناتر میشد چون ref را برای متغییر b ، زمانی که میخواستیم متغییر b را تعریف کنیم ، گذاشته بودیم دیگه .
در زبان های برنامه نویسی سیستم نوع (type system) مشخص می کنه که نوع دهی به مقادیر در اون زبان چقدر سخت گیرانه است.
زبان #C از این لحاظ سخت گیرانه است، یک زبان strong typing ئه، بر خلاف مثلا ویژوال بیسیک که یک زبان weakly typing ئه.
این خصوصیت یک زبان ئه، بهتر یا بدتری وجود نداره، هر کدوم مزایا و معایب خودشون رو دارند.
رجوع شود به :
نوع‌دهی نیرومند و سست
 

جدیدترین ارسال ها

بالا