زندگی یک گیک

خاطرات مختصری از علایق یک گیک

زندگی یک گیک

خاطرات مختصری از علایق یک گیک

پیوندهای روزانه

۳۲ مطلب با موضوع «برنامه نویسی :: سی شارپ» ثبت شده است

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



فرمول موفقیت یک کارآفرین:

۱- با آدم های فوق العاده کار کن.

در پیدا کردن شریک کاری و استخدام افراد، اصلا کوتاه نیایید. و همچنین با افرادی که افق دید کوتاهی دارند و یا تمایلات خود محور دارند کار نکنید.

۲- چالش های بزرگ را ترجیح دهید.

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

۳- تمرکز.

به اکثر چیزها نه بگو. همراه شدن ها. مردم. قهوه خوردن ها. پروژه ها. تنها تعداد اندکی از آن ها اهمیت دارند.(بله، تشخیص دادن مهم ها، کار سختی است.) خودتان را گیج نکنید.

۴- مراقب خودتان باشید.

وقتی نمی خوابید، تغذیه خوبی ندارید، ورزش یا تمرین نمی کنید و زندگی بدون آدرنالین را برای مدت زیادی تجربه می کنید، عملکرد شما مختل می شود. تصمیمات شما هم مختل می شوند. حتی شرکت شما هم مختل می شود.

۵- به اطرافیان خود  اهمیت بدهید و به آن ها عشق بورزید.

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

  • geek

پ

خط کش جادویی!

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

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

 -برنده چندین مدال طلا و نقره ریاضیات از مسابقات جهانی

-دریافت نشان افتخار از وزارت علوم روسیه و سفیر ایران در مالزی
-دارای تاییده از وزارت آموزش و پرورش و معاونت پژوهشی دانشگاه سراسری...
-قابل استفاده برای تمامی مقاطع علمی

لینک دانلود

  • geek

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

چهار کارآفرین جوان استرالیایی، مهم ترین نکات برای رشد استارتاپ ها را با هم در میان گذاشتند.
این خانم ها بریجت لودون  موسس Expert360، گنویو جورج موسس The best day، ویتنی کومور موسس One shift و کت پورکیس  موسس Her fashion box هستند.

پیام آن ها بسیار ساده بود: ”دنیا در حال حاضر پذیرای کارآفرینان جوان تر و آماده تر است، پس خودت را بنداز داخل معرکه.“

با هم چهار نکته از نگاه هر یک از این چهار خانم کارآفرین جوان  را بررسی می کنیم.

۱- زن بودن یک نکته مثبت است.
بریجت لودون می گوید: ” الان موقع خیلی خوبی برای کارآفرین شدن است. واژه کارآفرین قبلا یک کلمه نامناسب محسوب می شد، ولی مردم دارن کم کم درک می کنند که کارآفرین ها قادرن چه ارزش هایی  رو تولید کنند و چه ردپای پررنگی در جامعه از خودشون به جا  بگذارند.
یک کارآفرین زن بودن ، شما رو در اقلیت قرار می دهد، که شما می تونید از این مسئله به عنوان یک نقطه قوت استفاده کنید.“

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

بریجت مسلما از این منحصر به فرد بودنش سود برده است. هنگام کار با مجریان کار، او و همکارش  امیلی یو، نیاز به استفاده از تخصص یک متخصص را احساس کردند و Expert360  را راه اندازی کردند. این وبسایت پلتفرمی برای یاری گرفتن بی دردسر از تخصص متخصصین زمینه های مختلف کاریست.
او می گوید: ”الان موقعش رسیده که کارآفرینی را شروع کرد.“ و به این نکته هم اشارهکرد که هیچ کاری مثل کارآفرینی به مذاق قشر جوان خوش نمی آید.

۲- سریع شکست بخور و از اشتباهاتت درس بگیر.
گنویو جورج که موسس سایت خوبی برای ایجاد ارتباط بین صاحب کارها و متقاضیان کار به اسم One shift است،می گوید: ”بهترین حالت اینه که سریع و سبک بال شکست بخوری.“

این مسئله قطعا در مورد گنویو ۲۳ ساله صادق بوده است. کمپانی او سال قبل، ۱۸ میلیون دلار ارزش داشته و در حال حاضر بیش از ۳۱۰ هزار کاربر فعال در استرالیا دارد.

اگر همان اوایل راه شکست بخورید، چیز خیلی زیادی از دست ندادید.
او افزود: ”راه برای من به این همواری ها هم نبوده است.“ او سر یک کلاه برداری هنگام برون سپاری وبسایتش، ۲۵۰۰ دلار را از دست داد. ولی به جای این که این اتفاق او را زمین گیر کند، به او یاد داد تا از اشتباهش درس بگیرد. و الان می داند که قبل از هزینه کردن، ابتدا باید محصولش برایش قابل لمس باشد.
او گفت: ”دیگه اصلا بی گدار به آب نمی زنم.“

گنویو برای کمک به شما، پیشنهاد یافتن یک شریک استراتژیک را داد که بتواند سرمایه گذاری تجاری شما را کنترل کند و به شما در رشد کارتان یاری برساند.

  • geek

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


خودتان را معرفی کنید :

من کیوان مرادی هستم و آبان 1362 به دنیا آمده ام. در دانشگاه رشته کامپیوتر را دنبال کردم و از سال 80 هم همراه حمید و خشایار به صورت حرفه ای وارد موسیقی شدم. من هم خشایار مرادی و متولد فروردین 1363 هستم. در رشته مهندسی عمران تحصیلاتم را ادامه داده ام. شاید بد نباشد بدانید که پسرعموی کیوان و پسرخاله حمید هم هستم. حمید فروزمند هستم و مرداد 1363 متولد شده ام و متالوژی خوانده ام. نکته جالب اینکه خشایار, پسر عموی کیوان و پسر خاله حمیده.

چطور ایده رستوران داری به ذهنتان رسید ؟

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

آیا انتظار این استقبال را داشتید ؟

خشایار میگوید شکست نخوردن برایمان کافی بود و کیوان میگوید اصلا انتظار این حد استقبال را نداشته .

چه چیزی باعث تفاوت شما با دیگر برگر ها در ایران شده ؟

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

چطور در بازار پر از رقیب فست فود ایران موفق شده اید ؟

ما تنها به ظاهر مغازه توجه نکرده ایم و روی کیفیت غذایی که به مردم ارائه میکنیم نیز دقت بسیار زیادی میکنیم .ما از شهرتمان برای ارائه یک غذای معمولی استفاده نکردیم بلکه برای اینکه شهرتمان لطمه نخورد سعی کرده این تا بهترین غذا را ارائه کنیم .

الان چه غذاهایی رو عرضه میکنید؟
جوسی برگر که گوشت ضخیم ۱۰۰% خالص آبدار, پنیر دوبل, نون تست شده, کاهو, گوجه, خیارشور, پیاز کاراملی و سس مخصوص بود. مینی برگر, دوبل برگر(Double) و اسموکی برگر

برنامه توسعه ای شما چیست ؟

ما شعبه اول را در اندرزگو و شعبه دوم را در سعادت آباد راه اندازی کردیم و الان به فکر شعبه سوم در تهرانپارس و شعبه چهارم در کرج هستیم البته اولویت اول کیفیت کار است و بعد به فکر توسعه هستیم .
تقسیم کار در «برگرلند» به چه صورت است؟ یکی از شما ۳ نفر، مدیر است و برای بقیه کار تعیین می‌کند یا کارها را متناسب با توانایی‌های‌تان بین خودتان تقسیم کرده‌اید؟

خشایار: اول، خیلی چشم‌اندازی از شرایط و ابعاد این کار نداشتیم. مثلا فکر می‌کردیم نهایتا به ۵ نفر به عنوان پرسنل در این کار نیاز داریم. اما الان ۳۳ نفر پرسنل داریم! یا مثلا ابتدا می‌خواستیم فقط دلیوری برگر داشته باشیم. بعد نظرمان عوض شد و جای کوچکی را برای نشستن مشتری‌ها راه انداختیم. در طول زمان و با فراز‌و‌نشیب‌های مختلف، کار ما کم‌کم بزرگ‌تر و کامل‌تر شد. به همین دلیل، مسئولیت‌های ما هم از ابتدا تا حالا تغییراتی کرده است.

الان هر کدام‌تان در «برگرلند» چه مسئولیتی دارد؟


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

منبع:road2success
  • geek
  1. اشتیاق آنها به استثنایی بودن باعث میشود عموماً کارهایی را انجام دهند که دیگران سراغشان نمیروند.
  2. درحالی که بسیاری از مردم به طور معتادان از همه چیز لذت میبرند وبه هر قیمتی از درد و ناراحتی اجتناب می کنند،افراد موفق ارزش رسیدن به اهداف از میان مسائل دشواررا درک می کنند.
  3. آنها ارزش و هسته درونی خود را شناسایی کرده اند.(چه چیزهایی برایشان مهم است)و بهترین کار خود را برای زندگی که منعکس کننده ارزش آنهاست انجام می دهند.
  4. تعادل دارند.درحالی که ممکن از نظراقتصادی موفق باشند،میدانند که پول و موفقیت را نمیتوان با هم عوض کرد.آنها میدانند افرادی که فقط از نظراقتصادی موفق هستند را نمی توان افراد موفق نامید.متاسفانه ما در جامعه ای زندگی میکنیم که به ما یاد داده پول برابرموفقیت است.مثل خیلی از چیزهای دیگرپول یک ابزاراست ،مطمئناً پول چیز بدی نیست اما نهایتاً تنها یک وسیله است.متاسفانه خیلی از مردم آن را می پرستند.
  5. آنها اهمیت خودداری ونظم را درک می کنندوقوی هستند.successful people
  6. درامان هستند.درک آنها از ارزش ،دارایی ،جایی که زندگی می کنند و یا  آنچه در ظاهر به نظرمی رسند ،نیست.
  7.  دست  دلباز ومهربان هستند.از کمک کردن به دیگران برای دستیابی به موفقیت لذت میبرند.
  8. فروتن هستند و از پذیرفتن اشتباه و عذرخواهی ناراحت نمی شوند.آنها به توانایی هایشان مطمئن و دلگرم هستند اما مغرور نیستند.با یادگیری از دیگران خوشحال می شوند.
  9. سازگار و تغییرپذیر هستند .آنها با پذیرفتن چیزهای جدید وناشناخته احساس راحتی می کنند.
  10. از نظرفیزیکی مراقب اندام خود هستند،با تمرینات المپیک اشتباه نکنید!اهمیت سلامت جسمانی را درک کرده اند.نگرانی آنها ظاهر نیست بلکه عملکرد و سلامتی است. بدن آنها کسی که آنها هستند نیست،مکانی است که در آن زندگی می کنند.
  11. سخت کار میکنند وتنبل نیستند.
  12. آنها مقاوم و انعطاف پذیرهستند.هنگامی که همه حوله را به کناری پرتاب میکنند،آنها تازه درحال گرم کردن هستند.
  13. خیلی انتقاد پذیر هستند و ممکن است طبق بازخوردها عمل کند.
  14. با افرادبی هدف و بی فایده ارتباط برقرار نمی کنند.
  15. وقت و انرژی خود را برای موضوعاتی که کنترل کافی روی آنها ندارند ،سرمایه گذاری نمی کنند.
  16. آنها از شنا کردن مخالف جهت اقیانوس برای انجام کاری که دیگران انجام نمی دهند،لذت میبرند.خوشنودی و تایید دیگران برایشان اهمیت ندارد.
  17. با همراهانشان راحت تراند.
  18. عالی ترین معیارخود را در نظر می گیرند که باعث ایجاد تعهدات محکم تر و قوی تر،اصول کاری بهتر و البته نتیجه خوب تری میشود.
  19. شکست را توجیه نمی کنند.اگرچه بسیاری درحال سخن گفتن درباره سن،کمردرد،کمبود زمان ،شرایط ژنتیکی نامناسب، بدشانسی،رئیس بداخلاق و کمبود فرصت مناسب (دلایل مناسب برای شکست)،هستند.آنها دنبال پیدا کردن راهی برای روبرویی با چالشها هستند.
  20. می دانند چطور از زندگی لذت ببرند.
  21. حرفه آنها هویتشان نیست ،کارشان است،کسی که هستند نیست،چیزی است که انجام میدهند.
  22. آنها بیشتر به اثر بخشی علاقه مندند تا به راحتی.در حالی که اکثریت در جستجوی سریعترین و آسان ترین روش (میانبر)هستند،آنها دنبال اقداماتی هستند که در زمان طولانی نتیجه خوبی داشته باشد.
  23. کاری را که شروع میکنند به اتمام می رسانند.بسیاری از مردم زندگیشان را صرف شروع کارهایی کرده اند که هرگز تمامشان نکرده اند.اما افراد موفق کار را تمام میکند.حتی اگر هیجان و تازگی آن رنگ ببازد.
  24. چند بعدی هستند .موجودات پیچیده و شگفت انگیزی هستند (مثل همه انسانها).آنها تنها بعد فیزیکی و روحی را در نظر نمیگیرند بلکه متوجه جنبه معنوی و عاطفی خود نیز هستندوبا آگاهی تلاش در سالم نگاه داشتن آنها دارند.
  25. به شعار خود عمل میکنند.درباره فرضیه ها سخنرانی نمی کنند و با حقیقت زندگی میکنند.
منبع:utiletips
  • geek


در هنگام نوشتن یک برنامه در مواقعی بایستی مقداری را در یک مکان از سیستم کاربر ذخیره کنیم . انتخاب برنامه نویسان در این گونه موارد معمولا از بین سه گزینه ی زیر می باشد :

1- DataBase
2- فایل های INI
3- رجیستری ( تنها در برنامه نویسی برای سیستم های ویندوزی کاربرد دارد )



 

استفاده از DataBase : به منظور نگهداری تعداد زیادی از مقادیر ، بهترین گزینه است . همچنین در صورتی که پای امنیت اطلاعات ذخیره شده در میان است ، در انجام این روش شک نکنید . در این روش میتوانید از قابلیت Password Protection که در تمامی بانک های اطلاعاتی وجود دارد ، استفاده کنید .

استفاده از فایل های INI : در بعضی موارد هم میتوان از این روش استفاده کرد . البته این روش همراه با پیچیدگی و امنیت پایین میباشد .

استفاده از رجیستری : روشی که قصد توضیح آن را داریم ، همین روش است . این روش دارای امنیت نسبتا پایینی ست . پس امنیت اطلاعات خود را با این روش به خطر نیاندازید . البته میتوانید اطلاعات خود را به صورت Encrypt شده در رجیستری قرار دهید ( مثلا مواقعی که قصد ذخیره یک رمز عبور ، در یک برنامه ساده را دارید ) . یکی از مزایای این روش سادگی و راحتی آن است .

اگر موافق باشید ، به سراغ مراحل عملی کار برویم :

یک پروژه ی جدید سی شارپ باز کنید و اسم آن را Registry in CS بگذارید .

حالا وارد قسمت کد نویسی شده و Name Space زیر را در قسمت General تعریف کنید :

using Microsoft.Win32;

حالا میتوانید خیلی راحت در هر جایی از برنامتان از کلاس Registry استفاده کنید .

در قسمت زیر اجزای این کلاس را مورد بررسی قرار خواهیم داد :

1- Registry.ClassesRoot

از این قسمت میتوانید برای انجام عملیات مختلف بر روی شاخه HKEY_CLASSES_ROOT استفاده کنید .

چون متدها به صورت Alphabetic مرتب شده اند ، بنده هم آنها را به ترتیب توضیح میدهم . البته در یک مورد استثنا وجود دارد . آن هم متد OpenSubKey هست که باید در ابتدا توضیح بدهم ، چون تعداد زیادی از متدها به این متد وابستگی دارند .

1-1 : OpenSubKey

بوسیله این متد میتوانید یک زیر کلید را باز کنید . برای مثال به کد زیر دقت کنید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

در این کد نکات زیادی وجود دارد .

خط اول : یک متغییر از نوع RegistryKey تعریف کردیم .

خط دوم : مقدار متغییر reg را که در بالا تعریف کرده بودیم ، برابر کلید بازشده ( GC ) قرار دادیم تا بتوانیم عملیات مورد نظر خود را روی کلید باز شده انجام دهیم .

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GCClsid”,true);

 

در همان خط دوم یک کلمه true می بینید . شاید بپرسید این کلمه چه معنایی دارد ؟! این کلمه به برنامه میگوید که کاربر دسترسی به این کلید را تایید میکند ( در بعضی مواقع دسترسی باید تایید شود ) .

1- 2 : Close

این متد کلید قبلی را که توسط متد OpenSubKey باز شده بود ، میبندد . بهتر است بعد از هر بار که متد OpenSubKey را به کار میگیرید ، در پایان کارتان متد Close را اجرا کنید .

1- 3 : CreateSubKey

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.CreateSubKey(“NewSubKey”);

 

1- 4 : DeleteSubKey

اگر خواستید یک زیر کلید را حذف کنید ، میتوانید از این متد استفاده کنید . کد زیر همان کلید قبلی را که ساختیم پاک میکند :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteSubKey(“NewSubKey”);

 

1- 5 : DeleteSubKeyTree

این متد یک کلید با تمام زیر کلیدهایش و مقادیر زیر مجموعه اش را پاک میکند :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteSubKeyTree(“NewSubKey”);

1- 6 : DeleteValue

این متد هم که از نامش پیداست . پاک کردن یک مقدار کار این متد است . به کد زیر توجه کنید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteValue(“Your Value”);

1- 7 : Flush

خوب است در هر قسمتی که کارتان با رجیستری تمام شد ، یک بار این متد را فراخوانی کنید . البته متد Close کار این متد ( Flush ) را هم انجام خواهد داد .

Registry.ClassesRoot.Flush();

1- 8 : GetAccessControl

به MSDN مایکروسافت مراجعه کنید .

1- 9 : GetSubKeyName

با استفاده از این کد میتوانید زیر کلیدهای یک کلید رجیستری را بدست بیاورید . فقط قبل از اینکه کد زیر را اجرا کنید ، یک لیست باکس به فرمتان اضافه کنید و خاصیت Name آن را برابر با listBox قرار دهید :

RegistryKey Reg;

Reg = Registry.CurrentUser.OpenSubKey(“Software”);

//————-

foreach (string strSubKeysName in Reg.GetSubKeyNames())

{

listBox.Items.Add(strSubKeysName);

}

1- 10 : GetValue

این متد میتواند مقدار یک Value را برگرداند . کد زیر را ببینید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show(reg.GetValue(“Your Value”).ToString());

1- 11 : GetValueKind

با این متد میتوانید نوع یک Value را دریافت کنید .

انواع Value عبارتنداز :

1- String

2- Binary

3- DWORD

4- Multi-String

5- Expandable

به این کد توجه کنید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show(reg.GetValueKind(“Your Value”).ToString());

 

1- 12 : GetVlaueNames

با این کد هم میتوانید مقادیر موجود در یک کلید را بدست بیاورید . کد زیر :

RegistryKey Reg;

Reg = Registry.CurrentUser.OpenSubKey(“SoftwareMy APPSettings”);

//————-

foreach (string strSubKeysName in Reg.GetValueNames())

{

listBox1.Items.Add(strSubKeysName);

}

1- 13 : Name

این یکی هم مسیر جاری رجیستری را برمیگرداند :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show (reg.Name);

1- 14 : SetAccessControl

به MSDN مایکروسافت مراجعه کنید .

1- 15 : SetValue

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

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

Reg.SetValue(“My Value”, “Program”,RegistryValueKind.String);

یک نکته در این کد وجود دارد . در خط سوم کدها آنجا که نوشته شده RegistryValueKind.String ، اینجا نوع متغییر تنظیم شده است . انواع متغیر ها را میتوانید در راهکار 1- 11 مشاهده کنید .

1- 16 : SubKeyCount

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

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

MessageBox.Show(Reg.SubKeyCount.ToString());

1- 17 : ValueCount

و اما آخرین مورد . بوسیله این تابع میتوانید تعداد متغییرهای داخل یک کلید را بدست بیاورید .

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

MessageBox.Show(Reg.ValueCount.ToString());

  • geek

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

رها کنید و فایل ها به آن اضافه شوند :



کد برنامه:

در کد فوق ، در تابع اول ، آدرس یا Filename فایل ها درون یک آرایه String ذخیره میشوند به لیست باکس

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

قبول کن.

در تابع دوم پارامتر DataFormat نوع فایل را برمیگرداند که FileDrop منظور نوع فایل ویندوزی است .


نکته : فقط خاصیت AllowDrop لیست باکس را باید True نمایید.


لینک دانلود سورس

private void listBox1_DragDrop(object sender, DragEventArgs e)
{
	string [] allfiles = (string[])e.Data.GetData(DataFormats.FileDrop,
 false); int n = allfiles.Length; for (int i = 0; i < n; i++) listBox1.Items.Add(allfiles[i]); } private void listBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; }
  • geek

پلی مرفیسم (Polymorphism)
یکی دیگر از مفاهیم اولیه ی شیء گرایی پلی مرفیسم ( چند ریختی ) می باشد. پلی مرفیسم به معنای توانایی استفاده کردن از فرم های مختلف یک نوع است بدون توجه به جزئیات آن .
برای مثال هنگامیکه سیگنال تلفنی شما فرستاده می شود ، از نوع تلفنی که در انتهای خط موجود است خبری ندارد. تلفن انتهای خط ، می خواهد یکی از تلفن های عهد عتیق باشد و یا تلفنی با آخرین امکانات روز .
شرکت مخابرات (!) تنها از نوع پایه ای به نام
phone خبر دارد و فرض می کند که هر instance از این نوع می داند که چگونه صدای زنگ تلفن شما را به صدا در آورد. بنابراین شرکت مخابرات از تلفن شما به صورت پلی مرف استفاده می کند.
در عمل پلی مرفیسم هنگامی مفید خواهد بود که بخواهیم گروهی از اشیاء را به یک آرایه نسبت دهیم و سپس متدهای هر یک را فراخوانی کنیم. الزاما این اشیاء از یک نوع نخواهند بود.

نحوه ی ایجاد متدهای پلی مرفیک :
برای ایجاد متدی که نیاز است تا پلی مرفیسم را پشتیبانی نماید ، تنها کافی است آنرا از نوع
virtual در کلاس پایه تعریف کنیم. مثال :
فرض کنید تابع
DrawWindow در کلاس Window تعریف شده است. برای ایجاد قابلیت پلی مرفیسم در آن به صورت زیر عمل می شود :

public virtual void DrawWindow( )

در این حالت هر کلاسی که از Window مشتق شود ، مجاز است نگارش خاص خودش را از DrawWindow ارائه کند. در این صورت در کلاسی که از کلاس پایه ی ما ارث می برد ، تنها کافی است که کلمه ی کلیدی override را قبل از نام تابع مذکور ذکر نماییم.

یک مثال کامل :

using System;

public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}

public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}

public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
public class DrawDemo
{
public static int Main(string[ ] args)
{
DrawingObject[ ] dObj = new DrawingObject[4];

dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();

foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}

return 0;
}
}

کلاس DrawingObject ، کلاسی پایه برای تمام کد ما که از آن به ارث می برد ، می باشد. متد Draw در آن با کلمه ی کلیدی virtual معرفی شده است. یعنی تمام کلاس های فرزند این کلاس والد می توانند این متد را override کنند ( تحریف کردن و یا تحت الشعاع قرار دادن هم ترجمه شده است! ).
در ادامه سه کلاس تعریف شده اند که تمامی آنها از کلاس مبنا ارث می برند و تابع
Draw را تحریف کرده اند (!). با استفاده از کلمه ی کلیدی override می توان تابع مجازی کلاس مبنا را با تعریفی جدید در زمان اجرای برنامه ارائه داد. تحریف شدن تنها زمانی رخ می دهد که کلاس ، توسط ریفرنس کلاس مبنا مورد ارجاع واقع شده باشد.
و در متد
Main برنامه از این کلاس ها در عمل استفاده گردیده است. در متد Main ، آرایه ای از نوع DrawingObject تعریف و مقدار دهی اولیه شده است تا بتواند 4 شیء از نوع این کلاس را در خودش ذخیره کند.
بدلیل رابطه ی ارث بری موجود می توان آرایه ی
dObj را با نوع هایی از کلاس های Line ، Circle و Square مقدار دهی کرد (همانند کدهای بعدی متد Main ) . اگر ارث بری در اینجا وجود نمی داشت می بایست به ازای هر کلاس یک آرایه تعریف می شد.
سپس از حلقه ی زیبای
foreach برای حرکت در بین اعضای این آرایه استفاده گردیده است. در اینجا هر شیء متد خاص خودش را در مورد Draw فراخوانی می کند و نتیجه را روی صفحه نمایش خواهد داد.
خروجی نهایی به صورت زیر خواهد بود :

Output:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object

  • geek

کلاس ها ی abstract
کلاس ها را همچنین می توان به صورت
abstract تعریف کرد. از این نوع کلاس ها نمی توان instance ایی را ایجاد نمود. در این کلاس های پایه ، صرفا تعریف متدها و خواص هایی عنوان گردیده و در آینده در کلاس های فرزند توسعه داده خواهند شد. برای مثال :

public abstract class Named
{
public abstract String Name {get; set;} // property
public abstract void PrintName(); // method
}
public class B : Named
{
private String name = "empty";
public override String Name
{
get{return name;}
set{name=value;}
}
public override void PrintName()
{
Console.WriteLine("Name is {0}", name);
}
}

والی که شاید پیش بیاید این است که اگر interface ها صرفا تعریف توابع و خواص را می توانند در خود جای دهند پس چه دلیلی برای بکار بردن آنها و طولانی کردن کار کد نویسی وجود دارد؟
کاربردهای زیادی را می توان برای اینترفیس ها برشمرد. اینترفیس یک رفتار را تعریف می کند. فرض کنید در حال توسعه ی برنامه ایی هستید که بر روی دو کامپیوتر مختلف باید با هم در ارتباط مستقیم بوده و برهم کنش داشته باشند و هر برنامه از ماژولی به نام
CCommObj communication object استفاده می نماید. یکی از متدهای این شیء ، SendData() می باشد که رشته ای را دریافت کرده و به برنامه ی دیگر می فرستد. این فراخوانی از نوع asynchronous است زیرا ما نمی خواهیم اگر خطایی در شبکه رخ داد، برنامه برای همیشه منتظر باقی بماند. اما چگونه برنامه ی A که تابع ذکر شده را فراخوانی کرده است می تواند تشخیص دهد که پیغام به مقصد رسیده است یا خیر و یا آیا خطایی در شبکه مانع رسیدن پیغام گشته است یا خیر؟ جواب بدین صورت است که CCommObj هنگام دریافت پیغام ، رخدادی را سبب خواهد شد و اگر خطایی رخ داده باشد خیر. در این حالت نیاز به یک ماژول logging نیز احساس می گردد تا خطاهای رخ داده را ثبت نماید. یک روش انجام آن این است که CCommObj پیاده سازی این امکان را نیز بعهده گرفته و اگر فردا نیز خواستیم ماژول دیگری را به برنامه اضافه کنیم هر روز باید CCommObj را تغییر دهیم. تمام این کارها را به سادگی می توان در یک اینترفیس مدل کرد. روش آن نیز در ادامه بیان می گردد:
در ابتدا یک اینترفیس ایجاد می کنیم تا لیست تمام امکانات ممکن را "منتشر" کند:

interface ICommObjEvents
{
void OnDataSent();
void OnError();
}

شی ء CCommObj ما از این توابع که بعدا توسعه داده خواهند شد برای با خبر سازی کلاینت ها استفاده می نماید. تمام متدها در یک اینترفیس ذاتا پابلیک هستند بنابراین نیازی به ذکر صریح این مطلب نمی باشد و اگر اینکار را انجام دهید کامپایلر خطای زیر را گوشزد خواهد کرد :

The modifier 'public' is not valid for this item

در ادامه کلاینت CClientApp_A را پیاده سازی خواهیم کرد :

class CClientApp_A:ICommObjEvents
{
public void OnDataSent()
{
Console.WriteLine("OnDataSent");
}
public void OnError()
{
Console.WriteLine("OnError");
}
private CCommObj m_Server;
public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
string strAdd = ("N450:1");
m_Server.read (strAdd,10);
}
}

در کد فوق کلاس CClientApp_A از ICommObjEvents ارث برده و تمام متدهای این اینترفیس را پیاده سازی نموده است. هنگامی که CCommObj تابع OnDataSent را فراخوانی می کند این کلاینت پیغام را دریافت خواهد کرد. لازم به ذکر است که کلاس کلاینت ما چون از یک اینترفیس ارث بری می نماید پس باید تمام توابع و خواص کلاس پایه را پیاده سازی کند در غیر اینصورت هر چند برنامه کامپایل خواهد شد اما هنگامی که شیء CCommObj هر کدام از توابع این کلاس را فراخوانی کد ، خطای زمان اجرا رخ خواهد داد.
متد
Init کلاس فوق آرگومانی را از نوع CCommObj دریافت نموده و در یک متغیر private آنرا ذخیره می نماید. همچنین در این متد ، متد Advise از کلاس CCommObj نیز فراخوانی گشته است.

public class CCommObj
{
private int m_nIndex;
public ICommObjEvents [ ] m_arSinkColl;
public CCommObj()
{
m_arSinkColl = new ICommObjEvents[10];
m_nIndex = 0;
}
public int Advise(ICommObjEvents theSink)
{
m_arSinkColl[m_nIndex] = theSink;
int lCookie = m_nIndex;
m_nIndex++;
return lCookie
}
public void SendData(string strData)
{
foreach ( ICommObjEvents theSink in m_arSinkColl)
if(theSink != null )
theSink.OnDataSent ();
}
}

  • geek

مقابله با خطاها در سی شارپ (Exception Handling in C#)
EXCEPTION یک خطای زمان اجر است که بدلیل شرایطی غیرنرمال در برنامه ایجاد می شود. در سی شارپ exeption کلاسی است در فضای نام سیستم. شیء ایی از نوع exception بیانگر شرایطی است که سبب رخ دادن خطا در کد شده است. سی شارپ از exception ها به صورتی بسیار شبیه به جاوا و سی پلاس پلاس استفاده می نماید.

دلایلی که باید در برنامه
exception handling حتما صورت گیرد به شرح زیر است:
- قابل صرفنظر کردن نیستند و اگر کدی این موضوع را در نظر نگیرد با یک خطای زمان اجرا خاتمه پیدا خواهد کرد.
- سبب مشخص شدن خطا در یک نقطه از برنامه شده و ما را به اصلاح آن سوق می دهد.

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

class A {static void Main() {catch {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {finally {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {try {}}}
TEMP.cs(6,3): error CS1524: Expected catch or finally

بهتر است یک مثال ساده را در این زمینه مرور کنیم:

int a, b = 0 ;
Console.WriteLine( "My program starts " ) ;
try
{
a = 10 / b;
}
catch ( Exception e )
{
Console.WriteLine ( e ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output of the program is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[ ] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
Remaining program

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

تعدادی از کلاس های
exception در سی شارپ که از کلاس System.Exception ارث برده اند به شرح زیر هستند :

• Exception Class - - Cause
• SystemException - A failed run-time check;used as a base class for other.
• AccessException - Failure to access a type member, such as a method or field.
• ArgumentException - An argument to a method was invalid.
• ArgumentNullException - A null argument was passed to a method that doesn't accept it.
• ArgumentOutOfRangeException - Argument value is out of range.
• ArithmeticException - Arithmetic over - or underflow has occurred.
• ArrayTypeMismatchException - Attempt to store the wrong type of object in an array.
• BadImageFormatException - Image is in the wrong format.
• CoreException - Base class for exceptions thrown by the runtime.
• DivideByZeroException - An attempt was made to divide by zero.
• FormatException - The format of an argument is wrong.
• IndexOutOfRangeException - An array index is out of bounds.
• InvalidCastExpression - An attempt was made to cast to an invalid class.
• InvalidOperationException - A method was called at an invalid time.
• MissingMemberException - An invalid version of a DLL was accessed.
• NotFiniteNumberException - A number is not valid.
• NotSupportedException - Indicates sthat a method is not implemented by a class.
• NullReferenceException - Attempt to use an unassigned reference.
• OutOfMemoryException - Not enough memory to continue execution.
• StackOverflowException - A stack has overflown.

در کد فوق صرفا عمومی ترین نوع از این کلاس ها که شامل تمامی این موارد می شود مورد استفاده قرار گرفت یعنی :

catch ( Exception e )

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

مثالی دیگر: ( در این مثال خطایابی دقیق تر با استفاده از کلاس های فوق و همچنین مفهوم
finally نیز گنجانده شده است )

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( InvalidOperationException e )
{
Console.WriteLine ( e ) ;
}
catch ( DivideByZeroException e)
{
Console.WriteLine ( e ) ;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output here is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[ ] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
finally
Remaining program

قسمت موجود در قطعه ی فاینالی همواره صرفنظر از قسمت های دیگر اجرا می شود.
به مثال زیر دقت کنید :

int a, b = 0 ;
Console.WriteLine( "My program starts" )
try
{
a = 10 / b;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
Here the output is
My program starts
Exception occurred: System.DivideByZeroException:
Attempted to divide by zero.at ConsoleApplication4.Class1.
Main(String[ ] args) in d:\dont delete\consoleapplication4
\class1.cs:line 51
finally

قسمت چاپ Remaining program اجرا نشده است.

عبارت
throw :
این عبارت سبب ایجاد یک خطا در برنامه می شود.

مثال :

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( Exception e)
{
throw
}
finally
{
Console.WriteLine ( "finally" ) ;
}

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

  • geek