سلام دوستان
من يك كلاس دارم بنام كلاس 1
و يك كلاس ديگه بنام كلاس 2
و داخل كلاس1 يه متد از يه كلاس ديگه رو استفاده كردم
حالا ميخام داخل متدم به شي از لاس 2 دسترسي داشته باشم (اين شي در كلاس form ايجاد شده)
شما راه حلي به ذهنتون نميرسه ؟
سلام دوستان
من يك كلاس دارم بنام كلاس 1
و يك كلاس ديگه بنام كلاس 2
و داخل كلاس1 يه متد از يه كلاس ديگه رو استفاده كردم
حالا ميخام داخل متدم به شي از لاس 2 دسترسي داشته باشم (اين شي در كلاس form ايجاد شده)
شما راه حلي به ذهنتون نميرسه ؟
سلام
اصولاً بحث شما هیچ ربطی به تو در تو بودن کلاسسها ندارد.من يك كلاس دارم بنام كلاس 1
و يك كلاس ديگه بنام كلاس 2
و داخل كلاس1 يه متد از يه كلاس ديگه رو استفاده كردم
حالا ميخام داخل متدم به شي از لاس 2 دسترسي داشته باشم
شما برای صدا زدن متدهای کلاس و یا دسترسی به اعضا باید اشاره گر کلاس را داشته باشید.
یا اینکه متدهای و اعضا static باشد (VB-Shared) تا نیازی به اشاره گر نداشته باشد.
به کد زیر دقت کنید:
در این کلاس Class2 از متد AAA مربوط به Class1 استفاده میکند.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این استفاده را
یک بار در متد BBB خود و با کمک اشاره گری که از سازنده اش در CContainer تحویل گرفته بود، استفاده میکند.
یک بار هم در متد CCC خود و با کمک یک اشاره گر محلی که خودش ساخته استفاده میکند.
در مورد متد BBB همانطور که واضح است، کلاسس اصلی CContainer اول از Class1 نمونه سازی میکند (New) و بعد از Class2 و در حین نمونه سازی Class2 اشاره گر Class1 را هم برای استفاده آتی به Class2 تحویل میدهد.
اگر روی مثال فوق مشکلی دارید روی همین مثال بپرسید تا منظورتان هم شهودی و بهتر قابل فهم شود و راحت تر و دقیق تر من و یا سایر دوستان بتوانیم جواب دهیم.
(به اشاره گر فکر کنید، یا اشاره گر (بسازید و منتقل کنید و...) یا بدون اشاره گر و با عضو static)
دوست عزيز مشكل من اينجاست كه form1 طراحي كردم و داخل اون كلاسهاي لايه business Logic رو كه توي يه dll هست استفاده كردم
چيزي كه مسلمه من توي form1 در قسمت usingها dll مربوط به لايه بيزنس لاجيك رو اضافه كردم و كامپيوتر اجازه نميده كه توي لايه بيزنس using form1 بنويسم چون ممكنه وابستگي چرخشي پيش بياد
پس توابع و كلاسهاي لايه بيزنس نميتونند form1 رو ببينند ولي form1 ميتونه
حالا من توي يكي از توابع لايه بيزنس ميخام يه اخطار به كاربر بدم ولي 1- ميخام notify icon اين كارو برام بكنه نه MessageBox
2- اگه توي لايه بيزنس دست به چنين كاري بزنم (حتي اگه بشه چنين كاري هم كرد) حرفه اي نيست
من چييييييييييييييييكااااااا اااااااار كنننمممممممممممم ااااااااااخخخخخخههههههههه ؟؟؟؟؟
دوست عزيز مشكل من اينجاست كه form1 طراحي كردم و داخل اون كلاسهاي لايه business Logic رو كه توي يه dll هست استفاده كردم
چيزي كه مسلمه من توي form1 در قسمت usingها dll مربوط به لايه بيزنس لاجيك رو اضافه كردم و كامپيوتر اجازه نميده كه توي لايه بيزنس using form1 بنويسم چون ممكنه وابستگي چرخشي پيش بياد
پس توابع و كلاسهاي لايه بيزنس نميتونند form1 رو ببينند ولي form1 ميتونه
حالا من توي يكي از توابع لايه بيزنس ميخام يه اخطار به كاربر بدم ولي 1- ميخام notify icon اين كارو برام بكنه نه MessageBox
2- اگه توي لايه بيزنس دست به چنين كاري بزنم (حتي اگه بشه چنين كاري هم كرد) حرفه اي نيست
من چييييييييييييييييكااااااا اااااااار كنننمممممممممممم ااااااااااخخخخخخههههههههه ؟؟؟؟؟
سلام
درسته، ولی فقط VS در حالتی که بخواهید Refrence یک پروزه را add کنید این خطا را میدهد...كامپيوتر اجازه نميده كه توي لايه بيزنس using form1 بنويسم..
یعنی اگر شما کامپایل کنید بعد میتوانید اسمبلی کامپایل شده را add کنید!!!!!
البته طبیعی است که کار جالبی نیست و اگگر هم انجام دهید مدام باید دستی و با تغییر پروزه آن را کامپایل کنید و به پروزه دیگر تحویل دهید...
شدنی است ولی دردسرش زیاد است.
=====
به نظر من یک event میتواند راه حل مشکل باشد.
یعنی اگر من بودم یک event مثلاً با نام NewMessage و پارامترهای لازم برای کلاسسم درست میکردم و بعد در form1 که کلاس را new میکردم handler این رویداد را هم به متدی خصوصی در همان form1 قلاب میکردم و بعد هم در این متد و داخل form1 ، وظیفه لایه کاربری ام را به نحو مطلوب انجام میدادم.
فکر میکنم متوجه منظورم شده باشد و نیازی به کد #C یا VB نباشد.
سلام
راستی داشت یادم میرفت.
اگر این پیغامتان جنبه گزارش خطا را دارد و در ریسمانی مجزا هم اجرا نمیشود،
1)
شاید بتوانید در متد مورد نظر یک bool یا int برگردانید که مشخص کننده صحت انجام عملیات باشد و لایه بالاتر بر اساس آن در مورد نمایش پیغام مناسب تصمیم بگیرد.
2)
البته راه رسمی برای گزارش خطاها وقع Exception با دستور throw و با پیغام مناسب است، که لایه بالاتر با ساختار try-catch آن را هندلر میکند و حتی میتواند یک راست اقدام به نمایش متن خطا بکند.
اولا از توجه شما متشكرم
ثانيا متاسفانه برنامه لايه بيزينس در يك ريسمان جداگانه است
ثالثا نميخام پاي exception وسط كشيده بشه چون اطلاعات مهمي در حال تجزيه و تحليله كه در صورت بروز exception همش از بين ميره و هيچگنه قابل بازيابي نيست
حالا زاهي به ذهنتون ميرسه ؟
البته من هنوز راه كامپايل كردن و .... امتحان نكردم
مممممممنننوووون
سلام
خوب نظرتان راجب event چیست؟حالا زاهي به ذهنتون ميرسه ؟
پست 6:
یعنی اگر من بودم یک event مثلاً با نام NewMessage و پارامترهای لازم برای کلاسسم درست میکردم و بعد در form1 که کلاس را new میکردم handler این رویداد را هم به متدی خصوصی در همان form1 قلاب میکردم و بعد هم در این متد و داخل form1 ، وظیفه لایه کاربری ام را به نحو مطلوب انجام میدادم.
فکر میکنم متوجه منظورم شده باشد و نیازی به کد #C یا VB نباشد.
تشكر فراوان
آقا مشكل با event حل حل حل حل حل شد
خاطرتان عزيز
سرافراز باشي
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)