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

the_king

مدیرکل انجمن
سلام
ممنون استاد علی
یه سئوال ساده دارم اما جواب شو نمیدونم:green:
در یک فایل :

کد:
namespace Install
{
    class Install
    {
        public int MyFunc(int par1)
        {
            return par1 * par1;
        }
    }
}

در فایل دیگه :

کد:
using Install;

namespace Player
{
    class Player
    {
        int a;
        void MyPlayer()
        {
            Install.Install myVar = new Install.Install();
            myVar.MyFunc(10);
        }
    }
}

چرا در فایل و کد دوم ، با اونکه فضای نام Install رو using کردیم اما میخوایم شی myVar رو درست کنیم ، در اونجا فضای نام Install رو نمیشناسه و باید این فضای نام رو همراهش بنویسیم؟
سلام
ممنون استاد علی
یه سئوال ساده دارم اما جواب شو نمیدونم:green:
در یک فایل :

کد:
namespace Install
{
    class Install
    {
        public int MyFunc(int par1)
        {
            return par1 * par1;
        }
    }
}

در فایل دیگه :

کد:
using Install;

namespace Player
{
    class Player
    {
        int a;
        void MyPlayer()
        {
            Install.Install myVar = new Install.Install();
            myVar.MyFunc(10);
        }
    }
}

چرا در فایل و کد دوم ، با اونکه فضای نام Install رو using کردیم اما میخوایم شی myVar رو درست کنیم ، در اونجا فضای نام Install رو نمیشناسه و باید این فضای نام رو همراهش بنویسیم؟
Using ئه رو بیرون namespace نوشتید، بیاریدش داخل namespace
کد:
namespace Player
{
    using Install;

    class Player
    {
        int a;

        void MyPlayer()
        {
            Install myVar = new Install();
            myVar.MyFunc(10);
        }
    }
}
در ضمن نامگذاری مشابه namespace و کلاس توصیه نمیشه، توصیه خود مایکروسافت ئه :
Do not use the same name for a namespace and a class. For example, do not provide both a Debug namespace and a Debug class.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
Using ئه رو بیرون namespace نوشتید، بیاریدش داخل namespace
کد:
namespace Player
{
    using Install;

    class Player
    {
        int a;

        void MyPlayer()
        {
            Install myVar = new Install();
            myVar.MyFunc(10);
        }
    }
}
در ضمن نامگذاری مشابه namespace و کلاس توصیه نمیشه، توصیه خود مایکروسافت ئه :

ممنون
چرا؟
همه جا using در بیرون فضای نام اصلی نوشته میشه . دلیل اش چیه؟
 

the_king

مدیرکل انجمن
ممنون
چرا؟
همه جا using در بیرون فضای نام اصلی نوشته میشه . دلیل اش چیه؟
دلیلش اینه که Install قبل از اینکه یک Class باشه یک namespace ئه، شما بیرون از namespace از using استفاده می کنین به این معنی که کامپایلر در مواردی که پیدا نمیشن به namespace فلان سر بزنه.
کامپایلر Install رو پیدا می کنه، ولی namespace ئه، نمیگه پیدا نمیشه که نیازی به using داشته باشه، شما اون using رو هم حذف می کردید پیداش می کرد، ولی میگه فضای نام ئه، بجای کلاس قابل استفاده نیست که ازش متغیر بسازید.
اما در داخل namespace وقتی از using استفاده می کنید دیگه تمام اجزاء داخل فضای نام Install رو لحاظ می کنه، دیگه Install رو اول با class اش شناسایی می کنه، نه فضای نامش.
شما NET Framework. رو ببینید، جایی مشابه همچین کاری که شما کردین هست که namespace رو با Class همنام بگیره؟ مایکروسافت چیزی رو بیخود توصیه نمی کنه. توصیه هاش رو جدی بگیرید.
 

SU-57

Active Member
آقا سجاد من تا اینجای فیلم رو نگاه کردم و گیر کردم یعنی نمی تونم متوجه بشم
عکس زیر رو که از فیلم شماست نگاه کن (قسمت: 3 و زمان: یک ساعت و 15 دقیقه)

لینک

یکی اینکه چرا در جدول بعد از 256 عدد 1024 اومده و 4 برابر شده

بعد شما جدول زیر رو نگاه کن

http://uupload.ir/files/0cl_a4.jpg

اگه خونه 128 رو عدد 1 بذاریم و تو ذهنمون مثبت باشه که میشه 157
اما اگه تو ذهنمون منفی باشه باید بشه 157- ولی در اینجا درمیاد 99- پس 157- چطوری تو این جدول قرار می گیره
 
آخرین ویرایش:

SU-57

Active Member
آقا سجاد جلوتر که رفتم فهمیدم قضیه چیه
یعنی تو یک بایت از منفی 128 تا مثبت 127 رو بیشتر نمی تونیم قرار بدیم پس 157- شدنی نیست

خوب شما عدد منفی 99 و مثبت 99 رو تو اون جدول در یک بایت برای من بکش ببینم چطوری نشون داده می شه
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آقا سجاد من تا اینجای فیلم رو نگاه کردم و گیر کردم یعنی نمی تونم متوجه بشم
عکس زیر رو که از فیلم شماست نگاه کن (قسمت: 3 و زمان: یک ساعت و 15 دقیقه)

لینک

یکی اینکه چرا در جدول بعد از 256 عدد 1024 اومده و 4 برابر شده
سلام آقا رامین . خوبین؟
ممنون
اشتباه کردم . بین شون باید عدد 512 قرار میگرفت که حواسم نبود


بعد شما جدول زیر رو نگاه کن

http://uupload.ir/files/0cl_a4.jpg

اگه خونه 128 رو عدد 1 بذاریم و تو ذهنمون مثبت باشه که میشه 157
اما اگه تو ذهنمون منفی باشه باید بشه 157- ولی در اینجا درمیاد 99- پس 157- چطوری تو این جدول قرار می گیره
عدد مثبت شو اشتباه کردم بازم :green: . عدد 10001101 مثبت باشه ، میشه 141 (که اشتباها نوشتم 137) :
128+8+4+1 = 141
و اگه منفی باشه میشه 115- (که این یکی درسته) :

کد:
-128+8+4+1 = -115
 

SU-57

Active Member
عدد 99 رو خودم در آوردم

01100011

ولی عدد 99- رو هر کاری کردم در نمیاد با اینکه تو یک بایت عدد منفی 99 داریم!!
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آقا سجاد جلوتر که رفتم فهمیدم قضیه چیه
یعنی تو یک بایت از منفی 128 تا مثبت 127 رو بیشتر نمی تونیم قرار بدیم پس 157- شدنی نیست
البته اگه حالت منفی در نظر گرفته بشه ، درسته ولی اگه حالت مثبت به تنهایی در نظر گرفته شه ، از 0 تا 255 توی یک بایت جا میگیره (که در جلسه ی بعد یعنی جلسه ی چهار ، در ویژال استودیو سی شاپ ، مثال زده شد)

خوب شما عدد منفی 99 و مثبت 99 رو تو اون جدول در یک بایت برای من بکش ببینم چطوری نشون داده می شه

عدد منفی 99 همونی هه که شما در جدول نوشتین یعنی 10011101
عدد مثبت 99 هم میشه 01100011
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
عدد 99 رو خودم در آوردم

01100011

ولی عدد 99- رو هر کاری کردم در نمیاد با اینکه تو یک بایت عدد منفی 99 داریم!!

نحوه ی حساب کردن یک عدد منفی ، در همون قسمت 3 در دقیقه ی 1 ساعت و 24 دقیقه توضیح داده شد
 

SU-57

Active Member
آقا سجادT آقا محسن (techbamohsen) گفته بود که یک پردازنده فقط 4 عمل اصلی رو انجام میده اما شما گفتی فقط عمل جمع رو انجام میده مثلا
5+2 = 7
5+(2-) = 3

پردازنده 5x3 رو چطوری حساب می کنه اگه فقط با جمع کار می کنه و یا 5/3
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آقا سجادT آقا محسن (techbamohsen) گفته بود که یک پردازنده فقط 4 عمل اصلی رو انجام میده اما شما گفتی فقط عمل جمع رو انجام میده مثلا
5+2 = 7
5+(2-) = 3

پردازنده 5x3 رو چطوری حساب می کنه اگه فقط با جمع کار می کنه و یا 5/3

تا جایی که میدونم (و اگه غلط نباشه) ، پردازنده عمل جمع رو انجام میده
اعداد منفی ، همون نقیض اعداد مثبت هستن (که در همین جلسه ی 3 گفته شد)
ضرب اعداد ، باز هم همون جمع هستن . مثلا 5*3 برابر 5+5+5 هست .
تقسیم و اعداد اعشاری رو نمیدونم
بالاخره ، اعداد بسیار بزرگ یا عبارت های (عملیات ریاضی مثل ضرب و ...) بسیار بزرگ رو بجای ضرب یا منفی ، خودمون با استفاده از جمع به پردازنده بدیم حساب کنه ، خیلی سریعتر از ضرب و ... حساب میکنه (برای برنامه نویسی هایی که سرعت خیلی براشون مهمه)
----------
ولی بهتره صحت دقیق این موضوع رو از استاد علی بپرسین
 

SU-57

Active Member
آقا سجاد تصویر زیر رو نگاه کن

لینک

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

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
آقا سجاد تصویر زیر رو نگاه کن

لینک

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

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

من هم زیادتر دیگه پیگیری نکردم . باید از استاد علی بپرسین
 

the_king

مدیرکل انجمن
آقا سجادT آقا محسن (techbamohsen) گفته بود که یک پردازنده فقط 4 عمل اصلی رو انجام میده اما شما گفتی فقط عمل جمع رو انجام میده مثلا
5+2 = 7
5+(2-) = 3

پردازنده 5x3 رو چطوری حساب می کنه اگه فقط با جمع کار می کنه و یا 5/3
یه مباحثی هست که اگه درست توضیح داده نشه ابهام ایجاد می کنه و نهایتش نتیجه ای گرفته میشه بجای اینکه کمک کنه مشکل ساز میشه. پردازنده یه ساختار داخلی داره که از دید کسی که ازش استفاده می کنه پنهونه.
تو طراحی پردازنده مباحث اینچینی هست که فرضا برای عملیات ضرب اعداد صحیح از مدار جمع کننده استفاده می کنند و ... این مساله واقعیت داره اما در طراحی داخل پردازنده است، نه از دید بیرون پردازنده که برنامه نویس ازش استفاده می کنه. پردازنده یک جدول برای دستوراتش داره که نشون میده هر دستور چند سیکل اجرایی داره، یعنی چقدر اجرای هر دستور طول می کشه، فرضا میگه هر عمل جمع 2 سیکل طول می کشه، و عمل ضرب بین 12 تا 17 سیکل طول می کشه. این سربار در حداقل حالت ممکنه، چون اون عمل ضرب داخل پردازنده و با حداکثر سرعت ممکنه انجام میشه. شما اگه بخواهید در برنامه نویسی کل دستورات ضرب رو به جمع تبدیل کنید، هم متغیر اضافه می کنید، هم شرط و مقایسه، هم پرش شرطی و ... یک عالمه سربار دیگه به کدتون اضافه می کنید که ممکنه تعداد سیکل لازم از 100 تا هم بیشتر بشه. تو مباحث برنامه نویسی زبان هایی مثل اسمبلی و ++C / C مواردی هست که بشه یک عملیات رو با دستور جایگزین دیگری انجام داد تا سریعتر انجام بشه، ولی هم استفاده محدودی داره و هم منحصر به یکسری شرایط خاص سخت افزاری ئه.

پردازنده های PC نه تنها عملگر ضرب دارن، بلکه اصلا واحد محاسبات اعشاری خیلی قدرتمندی هم دارن که عملیاتش خیلی بیشتر از چهار عمل اصلی ئه. اینکه بدونیم پردازنده عمل ضرب رو با جمع داره انجام میده ابدا کمکی به ما نمی کنه چون یک مساله داخل پردازنده ای ئه، از بیرون پردازنده نباید شبیه سازیش کرد، اگه بخواهیم عملیات ضرب رو خودمون به جمع تبدیل کنیم نه تنها سریعتر اجرا نمیشه، بلکه کندترش هم می کنیم.
 

SU-57

Active Member
پردازنده های PC نه تنها عملگر ضرب دارن، بلکه اصلا واحد محاسبات اعشاری خیلی قدرتمندی هم دارن که عملیاتش خیلی بیشتر از چهار عمل اصلی ئه. اینکه بدونیم پردازنده عمل ضرب رو با جمع داره انجام میده ابدا کمکی به ما نمی کنه چون یک مساله داخل پردازنده ای ئه، از بیرون پردازنده نباید شبیه سازیش کرد، اگه بخواهیم عملیات ضرب رو خودمون به جمع تبدیل کنیم نه تنها سریعتر اجرا نمیشه، بلکه کندترش هم می کنیم.

جناب استاد علی
آقا سجاد در پایان قسمت دوم آموزش سی شارپ، تعریفی از شما کرد که من تصمیم گرفتم که تو این انجمن ثبت نام کنم و از دانش بالایی که دارید استفاده کنم یعنی منی که آقا سجاد رو بسیار با دانش می دونستم این شخص شما رو استاد خطاب می کنه و من با خوندن پست های شما دقیقا فهمیدم که آقا سجاد درست گفته بود

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

جناب استاد علی از شما هم تشکر می کنم که با راهنمایی هاتون مسیر درست رو به افرادی مثل من نشون میدین

من به خاطر این صحبت آقا سجاد اومدم تو این انجمن و دیگه از این انجمن رفتنی نیستم مگه اینکه از سوالاتم خسته بشید و بیرونم کنید

لینک
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، از کلاس abstract که شی ایجاد نمیشه . درسته دیگه؟
از اون طرف هم اگه از کلاس فرزند شی درست کنیم ، قطعا از کلاس های قبل از اون (کلاس های اجدادش) شی درست میشه . درسته؟
پس در کد زیر ، وقتی از کلاس AbstractChildClass شی درست کنیم در جایی ، چرا از کلاس وسط یعنی از کلاس AbstractClass ، شی درست میشه ؟!! علی الظاهر که بخاطر abstract بودنش نباید شی درست شه ! :


کد:
public class AbstractFatherClass
        {
            public int fatherElement;
        }
        public abstract class AbstractClass : AbstractFatherClass
        {
            public string Field1;
            public abstract int AbstractMethod(int par1);
        }

        public class AbstractChildClass : AbstractClass
        {
            public int Field2;
            public override int AbstractMethod(int par1)
            {
                return 5;
            }
        }

و چرا وقتی از کلاس AbstractChildClass شی درست میکنم و روش breackpoint میذارم ، داخل کلاس مورد نظر نمیره؟!
 

the_king

مدیرکل انجمن
سلام
استاد علی ، از کلاس abstract که شی ایجاد نمیشه . درسته دیگه؟
بله، مستقیما شیء ایجاد نمیشه.

از اون طرف هم اگه از کلاس فرزند شی درست کنیم ، قطعا از کلاس های قبل از اون (کلاس های اجدادش) شی درست میشه . درسته؟
شی مجزا نه، به این معنی نیست که از C : B شی ساخته بشه بعد یه شیء جدا برای B : A و یک شیء مجزا برای A ساخته بشه، اینها همه شون در یک instance مشترک اند، شیء ای که برای اجداد ساخته میشه که مستقل نیست.
یک کلاس می بینید از 10 تا interface استفاده می کنه، از interface هم که نمیشه شیء ساخت، این به این معنی نیست که 10 تا شیء مجزا ساخته میشه که هر کدوم برای یک interface باشه، همه شون در قالب یک instance اند. یک شیء ساخته میشه که ترکیبی از همه اون اجداد ئه.

و چرا وقتی از کلاس AbstractChildClass شی درست میکنم و روش breackpoint میذارم ، داخل کلاس مورد نظر نمیره؟!
نمیدونم کجا breakpoint قرار میدید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
بله، مستقیما شیء ایجاد نمیشه.


شی مجزا نه، به این معنی نیست که از C : B شی ساخته بشه بعد یه شیء جدا برای B : A و یک شیء مجزا برای A ساخته بشه، اینها همه شون در یک instance مشترک اند، شیء ای که برای اجداد ساخته میشه که مستقل نیست.
یک کلاس می بینید از 10 تا interface استفاده می کنه، از interface هم که نمیشه شیء ساخت، این به این معنی نیست که 10 تا شیء مجزا ساخته میشه که هر کدوم برای یک interface باشه، همه شون در قالب یک instance اند. یک شیء ساخته میشه که ترکیبی از همه اون اجداد ئه.


نمیدونم کجا breakpoint قرار میدید.

ممنون
ولی من دقیق متوجه نشدم
الان در کدی که دادم ، بالاخره از کلاس AbstractClass شی ساخته میشه؟ یا کلاس AbstractClass رو رد میکنه و فقط از کلاس های AbstractFatherClass و AbstractClass شی میسازه؟
یا همون اینترفیس ای که گفتین ، قضیه ی شی ساختنش چجوری میشه؟
میگم استاد علی ، من وقتی کد مثال زده بشه ، بهتر درک میکنم کلا
breakpoint ری خطی که از کلاس AbstractChildClass شی میسازم ، میذارم
 

the_king

مدیرکل انجمن
ممنون
ولی من دقیق متوجه نشدم
الان در کدی که دادم ، بالاخره از کلاس AbstractClass شی ساخته میشه؟ یا کلاس AbstractClass رو رد میکنه و فقط از کلاس های AbstractFatherClass و AbstractClass شی میسازه؟
یا همون اینترفیس ای که گفتین ، قضیه ی شی ساختنش چجوری میشه؟
میگم استاد علی ، من وقتی کد مثال زده بشه ، بهتر درک میکنم کلا
breakpoint ری خطی که از کلاس AbstractChildClass شی میسازم ، میذارم
چیزی به معنی رد کردن که وجود نداره. من در کدتون new ای نمیبینم، کجا شیء میسازید؟ فرض کنید که یک کلاس کارمند داریم که وارث کلاس انسان ئه و کلاس انسان وارث کلاس مهره داران.
حالا وقتی شی فرهاد از کلاس کارمند ساخته میشه یک شیء ساخته میشه که هم کارمند ئه و هم انسان و هم مهره داران. این شیء از نوع کارمند ئه و سازگار با انسان و مهره داران. برای ساختن فرهاد سه تا شیء ساخته نمیشه، فقط یک شیء ساخته میشه. وقتی فرهاد ایجاد شد سه تا شی از نوع کارمند و انسان و مهره داران ایجاد نمیشه، تنها فرهاد ایجاد شده. شیء فرهاد هم کارمند ئه و هم انسان ئه و هم مهره دار.
در خلال ساختن شیء فرهاد متد سازنده کلاس های انسان و مهره داران اجرا میشه ولی سه تا شیء مجزا که ساخته نمیشه. نمیشه که بگیم فرهاد یک شیء ئه و بجز اون یک شیء انسان و یک شیء مهره داران هم هست که کنار دست فرهاد هستن.
شما تو کدتون جایی ندارید که شی ساخته بشه، متد سازنده ای هم پیاده سازی نشده که بگید رویش breakpoint گذاشتم ولی متوقف نشد.
 

SU-57

Active Member
سلام سجاد جان

1- من تو قسمت 4 با گفته های شما به این نتیجه رسیدم (خودم تایپ کردم)

عکس

اما تو قسمت 5 شما گفتی اون اشتباهه لطف می کنی عکس اول رو اصلاح کنی که به هرکدوم دقیقا چی میگن

عکس

2- کدوم راه حل درسته نوشتن byte یا Byte و یا نوشتن short یا Int16 یا نوشتن float یا single شما کدوم رو اصولی تر می دونی یا تو نسخه های اینده مایکروسافت کدوم رو توصیه می کنه
من خودم موندم که با این همه نوع متغیر که حفظ کردنشون سخته چرا مایکروسافت برای هر نوع دو اسم تعیین کرده
 
آخرین ویرایش:

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

بالا