تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: کج فهمی در مسائل شی گرایی

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    13 کج فهمی در مسائل شی گرایی

    سلام

    من 2 مورد رو اساسی نمیفهمم.
    تو یک مثال ماکروسافت این موارد رو داریم.


    TcpListener = server = new TcpListener(port);

    TcpClient client = server.acceptTcpClient();

    NetworkStream stream = client.GetStrream();
    بحث من سر این هست که ما کی و چه وقت نیاز به ایجاد یک شی از نوع کلاس داریم؟ یعنی چطور باید تشخیص بدیم و نیاز ها چطوره؟
    اینجا ما یک شی ایجاد کردیم. از نوع کلاس TcpListner
    TcpListener = server = new TcpListener(port);
    اما مورد های بعد ما متغیر از نوع کلاس بدون ایجاد شی داریم.
    TcpClient client
    NetworkStream stream
    \

    در مورد شی میدانم برای کار بر روی یک کلاس و مدیریت توابع و متغیر ها و استفاده از اون یک شی از اون کلاس با new ایجد میکنیم که حاوی سازنده و .. هم میشه. و حافظه میگیریم.
    اما اون دو مورد چی؟


    ههه موارد بالا در سمت سرور هست.
    حالا در سمت Client
    ما دیگه متغیر از نوع کلاس نداریم. امدیم شی رو ایجاد کردیم!
    TcpClient client = new TcpClient(server,port)
    در صورتی که در سرور فقط متغیر از نوع تغیر کردیم و شی ایجاد نکردیم.
    Last edited by Life24; 23-04-2013 at 13:01.

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    سوال تان از این بابت خوب است که نشان میدهد میخواهید بفهمید و این خیلی دلگرم کننده است.

    برای آنکه بتوانید با یک کلاس کار کنید، در هر صورت باید یکجایی new شود.
    مورد اول که واضح است و خودتان آن را new کرده اید، پس می ماند دو شکل بعدی نمونه سازی...

    درواقع new همیشه وجود دارد، فقط شاید برخی موارد داخل یک تابع انجام شود.
    اجازه دهید مثالی بزنم.
    یک کلاس برای اعداد کسری می سازیم با دو متغییر برای اعداد صورت و مخرج.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این کلاس را با همچین کدی میتوان new کرد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا من میخواهم یک تابعی بنویسم که بتواند دو کسر را جمع کند، چه باید انجام دهم؟ چطور بنویسم؟ بگانم این کد مناسبی است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب چطور باید استفاده کرد؟ طبیعتاً با کدی شبیه این:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب حالا اجازه دهید من بپرسم!
    چرا x و y در کد بالا new شده اند ولی z چرا new نشده؟
    new شدن z کجاست؟
    چطور بفهمیم نیازی نبوده z را صراحتاً و دستی new کنیم؟


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

    خیلی طبیعی است که ورودی و خروجی توابع بتوانند کلاس باشند و طبیعتاً اگر خروجی یک تابع ، از نوع class (و چه struct) باشد، ما دیگر نیازی به new کردن نداریم، چون تابع دارد موجودیتی به ما پس میدهد، موجودیتی که هویتی در RAM دارد و حتماً قبلاً new شده و مقدار دهی شده که حالا تابع میتواند نتیجه کارش را در آن قالب به ما پس دهد.

    نمیدانم چقدر توانستم به خواسته شما نزدیک شوم.
    امیدوارم به چیزیکه میخواهید رسیده باشید؟!
    موفق باشید.

  3. 5 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •