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

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




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

نام تاپيک: اشاره گر تو C#

  1. #1
    داره خودمونی میشه darya_66_12_12's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    شیراز
    پست ها
    67

    14 اشاره گر تو C#

    بچه ها من تو اشاره گرا تو C# چند تا سوال دارم
    ممنون ميشم 1نفر بهم جواب ده
    اول اينكه اصلا چرا C# يا gava اشاره گر نداره؟؟؟
    اينكه اشاره گر نداره باعث كند شدنش نمي شه؟؟؟؟؟؟؟
    اهااا
    اصلا اگه بخوايم از اشاره گر استفاده كنيم چيكار بايد كنيم؟؟؟؟؟

  2. #2
    داره خودمونی میشه darya_66_12_12's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    شیراز
    پست ها
    67

    پيش فرض

    چراااا هيچكس جوابموو نميده؟

  3. #3
    پروفشنال mahdi7s's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    هر جایی می تونه باشه
    پست ها
    757

    پيش فرض

    بچه ها من تو اشاره گرا تو C# چند تا سوال دارم
    ممنون ميشم 1نفر بهم جواب ده
    اول اينكه اصلا چرا C# يا gava اشاره گر نداره؟؟؟
    اينكه اشاره گر نداره باعث كند شدنش نمي شه؟؟؟؟؟؟؟
    اهااا
    اصلا اگه بخوايم از اشاره گر استفاده كنيم چيكار بايد كنيم؟؟؟؟؟

    به علت سختی استفاده از اشاره گر ها و باگ های خطرناک و حذف مدیریت مستقیم حافظه معمولا زبان های جدید خود حافظه رو مدیریت می کنند و در اصل از درون با اشاره گرها کار می کنند به طوری که برنامه نویس را در گیر این مسائل نکنند و اگر شما تبدیل شده یک کد از سی شارپ به سی پی پی (تحت دات نت(مدیریت شده)) را ببینید خواهید دید که تعریف یک متغیر در سی شارپ برابر است با تعریف یک اشاره گر در سی پی پی.
    -----------------------------------------------------------------------------------------------------------------------------
    JAVA را دقیق نمی دانم ولی در شارپ امکان تعریف اشاره گر وجود دارد ولی من تا الان اگر هم استفاده کردم بعدش فهمیدم راه حل بهتری هم وجود دارد !!!

  4. #4
    داره خودمونی میشه darya_66_12_12's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    شیراز
    پست ها
    67

    پيش فرض

    ميشه بهم بگيد چطور استفاده كرديين؟؟
    ممنون ميشم بهم بگيد يا نمونه بزارين

  5. #5
    پروفشنال mahdi7s's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    هر جایی می تونه باشه
    پست ها
    757

    پيش فرض

    استفاده از unsafe در برای استفاده و تعریف اشاره گرها در msdn :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

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

    پيش فرض

    سلام
    اول اينكه اصلا چرا C# يا gava اشاره گر نداره؟؟؟
    تمام زبانهایی که من دیدم اشاره گر داشتند، منتها به روش خودشان!
    اصلاً بدون اشاره گر برنامه نویسی معنی ندارد ...
    من اطلاعاتی در RAM میرزیم، یک متن یک تصویر و... چطوری باید با آن کار کن؟؟؟
    خوب خیلی طبیعی است نقطه ای از RAM را که اطلاعات را ریختم نگه میدارم و آن را به عنوان دستگیره و اشاره گر اطلاعاتم قرار میدهم.

    در همه زبان های موجود اشاره گر وجود دارد ولی به روش و سینتکس خودشان ...
    ما میگم "سلام" انگلیسی ها میگند "Hello" !!!
    شما اشاره گر ++C را میبینید که * دارد!!! یعنی هر زبانی برای اشاره گر * نداشته باشد، اشاره گر ندارد !!!!!!!!!!!!!!!!!!!!!!!!!!!

    اصلا پس سینتکس چه میشود؟ سینتکس یعنی همین تفاوت نوشتاری ...
    قرار نیست هر زبانی که در عالم است برای اشاره گر از نماد * یا سینتکس ++C استفاده کند!

    در VB.Net و C#.Net هر متغییری که از یک class تعریف شود اشاره گری خواهد بود.
    مثلاً متغییر x در مثال زیر یک اشاره گر است! حالا * هم ندارد! چه فرقی میکند؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    =====

    مثال عملی تر ...

    الف) لیست پیوندی:
    نمیدانم چقدر به اصول برنامه نویسی آشنا هستید؟
    یکی از کاربردهای اشاره گر ها ساخت لیست های پیوندی است ...
    که در یک لیست پیوندی ذات اشاره گر و خواص ان مشخص میشود.

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

    Insert و Delete در لیست پیوندی بسیار سریع است، چون کافی است به محل مورد نظر بروید و اشاره گر گره قبلی را به گره جدید و اشاره موجود در گره جدید را به گره بعدی ست کنید و...

    نمونه کد یک گره برای استفاده در لیست پیوندی در ++C
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نمونه کد لیست پیوندی در #C
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نمونه کد لیست پیوندی در VB.Net
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نمونه کاملتری از یک لیست پیوندی در حالت کاملتر با پیاده سازی یک درخت گره ای که برای تاپیک دیگر نوشته بودم:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    به راحتی و در کمترین زمان ممکن و بدون هیچ * ای میتوان کد فوق را به C#.Net یا حتی VB.Net تبدیل کرد.
    طوری که دقیق همان کار را انجام دهد.

    اگر من میتوانم یک لیست پیوندی را (بدون هیچ * ای!) در #C و VB.Net بنویسم، پس اشاره گر چه شاخ و دمی باید داشته باشد که بگوییم فلان زبان ندارد؟!
    وقتی در زبانی به راحتی زبان دیگر میتوان لیست پیوندی ایجاد کرد، پس اشاره گر صریح و واضح وجود دارد.
    (همین یک دلیل به تنهایی برای کسی که بفهمد کافی است و بقیه مطالب این پست زیاده گویی است! )

    =====

    ب) آرایه یه و عناصر ایندکس شده پشت سر هم ...

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

    کد ++C
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد #C
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب این اگر اشاره گر نیست پس چیست؟
    فقط ستاره اینجا باید استفاده میشد؟ بدون ستاره قبول نیست؟
    حتماً "سلام" با "Hello" فرق دارد، چون ظاهرشان متفاوت است!!!

    =====

    ج) مقایسه اشاره گرها
    از موارد کاربد دیگر میتوان به مقایسه اشاره گر دو شی به جای خود دو شی اشاره کرد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همانطور که میبینید ++VC ترجیح میدهد برای مقایسه اشاره گر ستاره ای که دارد را نیاورد، سینتکس #C یک کست فرمالیته به object (فرمالیته یعنی هیچ تبدیلی در واقع رخ نمیدهد و فقط سینتکسی برای کامپایلر است) را ترجیح میدهد و سینتکس VB هم کلمه Is را ترجیح میدهد.

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

    =====

    د) اشاره گر صریح

    IntPtr که دات نت دارد در واقع یک معادل یک اشاره گر خالص *void در ++C است (IntPtr حتی به راحتی تحت unsafe در #C و C++.Net به *void کست میشود) و انواع متدها و دستورات دات نت که اشاره گری خاص برای کاری نیاز دارند IntPtr را به عنوان ورودی میگیرند یا پس میدهند.
    حالا حتماً باید این متدها در نوع ورودیشان مینوشتند *void !!!! و حالا که نوشته اند IntPtr دیگر قبول نیست! حتماً چون ستاره ندارد!!!!!

    =====

    البته یکی از کاربرد اشاره گرها دسترسی مستقیم به نقطه ای خاص از RAM است که این مورد زبان های سطح بالا مشکلاتی دارند و اشاره گرهای استفاده شده در زبانهای سطح بالا به تنهایی این قابلیت ندارند و فقط در اینجا تفاوتی وجود خواهد داشت.
    ولی اینجا هم مطالبی وجود دارد ...
    1) کاربرد این نوع استفاده از اشاره گر در برنامه واقعی بسیار بسیار کم است چون اصلاً دانستن عدد داخل اشاره گر برای برنامه نویس مهم نیست.
    2) اصولاً سیستم عامل به هر کاربر و هر ریسمانی اجازه نمیدهد به هر جای RAM سرک بکشد، کد ++VC و #C و VB و Java و Delphi و... هم ندارد، هر کدی که بخواهد در CPU اجرا شود و پایش را از حد مجوزهایش فراتر بگذارد سریعاً فرمانش بلوکه شده و به خطا خواهد خورد!
    3) همانطور که دوستمان mahdi7s در #C هم با فعال سازی unsafe میتوان این کار ها را کرد:
    4) دات نت توابعی و کلاس های آماده (مهمترین آنها Marshal) برای کار با IntPtr خودش و این مانورهای خاص در RAM را دارد که با کمک این توابع آماده میتوان به این قابلیت های دیگر اشاره گرها هم تحت اشاره گر عمومی IntPtr دات نت دسترسی پیدا کرد.

    دات نت به روش دات نت امکان پذیر است ...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    =====

    شما باید مفاهیم و مبانی مطالب را متوجه شوید نه اینکه صرف سینتکس یک زبان را معیار قرار دهید.
    من باید مفهوم کلمه "سلام" را درک کنم، احساس کنم و بفهمم چیست، چه میکند و کجا کاربرد دارد و کی استفاده کنم و در قبالش چه کنم ... شکل ظاهری "سلام" و "Hello" که مورد مهمی نیست، یک سینتکس و قرار داد نوشتاری است.

    به جرات میتوانم بگویم کسی که به شما گفته، فلان زبان اشاره گر ندارد، یعنی خودش اصلاً مفهوم و ذات اشاره گر را درک نکرده و نفهمیده است ... فقط سینتکس یک زبانی مثل ++C را دیده و تازه درک هم نکرده اصلاً اشاره گر نباشد چه کار با رایانه میتوان انجام داد؟ چطور بدون اشاره گر میتوان به اشیا دسترسی داشت؟ اصلاً تا وقتی زبانی قابلیت اشاره گر را به برنامه نویس ندهد چطور میخواهد شی گرایی را بدهد؟ و... و... و...

    =====

    بعد از همه اینها و اینکه اشاره گر در کدهای هر زبانی جاری است و به وفور استفاده میشود...
    بحث unsafe هم در #C وجود دارد که دوستمان در پست قبلی بیان کردند و میتوان مثل همان سینتکس ++C با اشاره گرها در #C کار کرد. (مثل اخرین خط کد این پست در چند خط بالاتر)

    مطلب اخر که اگر آقای X با زبان Y جدیدی (زبانهای چند ساله اخیر) کار میکند و نمیتواند کاری را انجام دهد، مطمن باشد و باشید که سواد آقای X نسبت به زبانی که کار میکند، مشکل دارد، نه زبان Y، فرقی هم ندارد آقای X سالها برنامه نویسی تجربی کار کرده باشد یا فوق لیسانس نرم افزار از فلان دانشگاه معتبر باشد.
    (این چیزی است که خودم عیناً و بارها در شرکت دیده ام)

    =====

    شب بخیر و جمیعاً موفق باشید.
    Last edited by _H2_; 15-04-2010 at 01:34.

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


  8. #7
    داره خودمونی میشه darya_66_12_12's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    شیراز
    پست ها
    67

    پيش فرض

    مرسيي مرسي مرسي مرسي از استاداي گرامي ممنوون

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

    پيش فرض

    سلام
    سوالی پیش آمد لازم شد تاپیک بیاد بالا.
    این بحث چی؟ انگار کمی در ماکروسافت بهش اشاره شده. این نماینگر همان اشاره گر در c++ هست؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

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

    پيش فرض

    سلام
    این بحث چی؟
    این جزء همان کدهای unsafe است که دوستمان mahdi7s به آن اشاره کردند و در آخر پست قبلی ام هم اشاراتی به آن داشتیم.
    که امکان تخصیص اشاره گر unsafe را به انواع بومی دات نت و پاره ای از struct ها با شرایط خاص میدهد و بدون پشتیبانی Generic و... میدهد.
    کلمات کلیدی unsafe و fixed و stackalloc از جمله کلمات کلیدی مرتبط با این موضوع هستند.
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    و در کل خیلی مورد استفاده نیست و بهتر است استفاده هم نشود.
    با درنظر گرفتن این مطلب که اشاره گر به مفهوم کلی که در پست قبلی ام اشاره کردم خیلی راحت و مطمئن در #C و VB.Net در دسترس است و کاربردهای روزمره و معتبر این حیطه (مانند لیست پیوندی) به راحتی قابل پیاده سازی است، دیگر دلیل زیاد و اصراری بر استفاده از unsafe باقی نمی ماند.
    (((
    تنها دلیل استفاده از unsafe میتواند در شرایط بسیار بسیار خاص جهت بازدهی بیشتر و یا تبادل داده با برخی API های خاص باشد.
    )))

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


Thread Information

Users Browsing this Thread

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

User Tag List

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

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