2018幎㮠TIOBEã®è©äŸ¡ã«ãããš ãVB.NETã¯CïŒãäžåããŸããã å¶ç¶ãã©ããã¯ããããŸãããã2æã«CïŒã®äœæè ã®1人ã§ããEric Lippertã¯ãRoslynã³ã³ãã€ã©ã®å ããŒã ã¡ã€ãã§ãããç±çãªVB.NETãã¡ã³ã§ããAnthony Greenã®å人ã®ããã°ã«æ³šç®ããããèªè ã«ä¿ããŸããã ããã®ãããªãªãœãŒã¹ã¯ãå°é家ããã®è©³çŽ°ãªè©³çŽ°æ å ±ã§ãããããã¥ã¡ã³ããèªãã ãã§ã¯ç°¡åã«èŠã€ããããšã¯ã§ããŸããããšãšãªãã¯ã¯æžããŠããŸãã Anthony Greenã®èšäºãVB.NETãšCïŒã®éãã®ç¶²çŸ çãªãªã¹ããã®ç¿»èš³ã®æåã®éšåã«æ³šç®ããŠãã ããã ããããããããã®èšèªã®æ Œä»ãã®ãã€ããã¯ã¹ã®ç§å¯ã¯ããããã®éãã«ãããŸãã
ç§ã®äººçã®ã»ãŒååã®æéãç§ã¯ãæã人æ°ã®ãã2ã€ã®.NETèšèªãã©ãã ã䌌ãŠãããããŸãã¯ç°ãªã£ãŠãããã«ã€ããŠãæ°ãåããªãã»ã©ã®è°è«ãç®ã®åœããã«ããŠåå ããŸããã æåã«ãã¢ããã¥ã¢ãšããŠã次ã«ãããšããŠããããŠæåŸã«ã顧客ã®æè·è ãããã°ã©ã ãããŒãžã£ãŒãèšèªãã¶ã€ããŒãšããŠãç§ã¯æ¬¡ã®ãããªããšãäœåºŠãèãããèªãã ãããŠãããšèšã£ãŠãéèšã§ã¯ãããŸããã
ã... VB.NETã¯ãCïŒã®ããã«ãå®éã«ã¯ILã®äžã«ããèãå±€ã§ã...ããŸãã¯
ã... VB.NETã¯å®éã«ã¯ã»ãã³ãã³ãªãã®åãªãCïŒã§ã...ãèšèªãXMLå€æãŸãã¯ã¹ã¿ã€ã«ã·ãŒãã§ãããã®ããã«ã
ãããŠãç±å¿ãªèšªåè ãã³ã¡ã³ãã§ãããæžããŠããªãå Žåãããã¯æ¬¡ã®ãããªè³ªåã§æ瀺ãããããšããããããŸãã ãããã«ã¡ã¯ãã¢ã³ãœããŒïŒ 1ã€ã®å Žæã§ãã®ãããªå°ããªéãã«ééããŸãã-ããã¯ãã°ã§ããïŒ ãã®äžçã®ãã¹ãŠã®åãšèã®åã«ãããŠåäžã§ããã¯ãã®ãããã®2ã€ã®åäžã®èšèªã¯ããã®1ãæã§ã©ã®ããã«åæ£ã§ããŸããïŒ ãªããã®ãããªäžæ£ãå¿ èŠãªã®ã§ããããïŒïŒ
ã åé¢ ãçªç¶å€ç°ãçºçãããŸã§ã¯åãã§ãããã®ããã«ã ãã®åŸåé¢ããçš®ã«ãªããŸããã ãã¡ãïŒ
ããããç§ã¯ãããç解ããŠããŸãã ãã€ã¯ããœããã«å ¥ç€Ÿããåã¯ããã®ã¢ã€ãã¢ãæŒ ç¶ãšä¿æããæµå¯Ÿè ã«å¯Ÿå¿ãããã誰ããå®å¿ãããããã®è°è«ãšããŠããã䜿çšããããšããããŸããã ç§ã¯åœŒå¥³ã®é åãç解ããŠããŸãã ç解ãããããç¹°ãè¿ããéåžžã«ç°¡åã§ãã ããããRoslynïŒæ¬è³ªçã«VBãšCïŒããŒãããå®å šã«æžãæããïŒã«5幎éåãçµãã§ãç§ã¯ãã®èããããã«æçœã«ééã£ãŠããããç解ããŸããã éçºè ãšãã¹ã¿ãŒã®ããŒã ãšååããŠãäž¡æ¹ã®èšèªã®ããããã€ã³ããåå®è£ ããäž¡æ¹ã®èšèªã§èšè¿°ãããæ°çŸäžè¡ã®ã³ãŒããæã€å·šå€§ãªãã«ããããžã§ã¯ããœãªã¥ãŒã·ã§ã³ã§ããŒã«ãåå®è£ ããŸããã ãããŠãå€ãã®éçºè ã圌ãã®éãè¡ãæ¥ããããšã以åã®ããŒãžã§ã³ã®çµæãšçµéšãšã®é«ãã¬ãã«ã®äºææ§ããããŠAPIã®å·šå€§ãªããªã¥ãŒã ãéåžžã«è©³çŽ°ã«ç¢ºå®ã«åçŸããå¿ èŠæ§ãèæ ®ããŠãç§ã¯éããéåžžã«å¯æ¥ã«ç¥ãããšã匷ããããŸããã å®éãç§ã¯æ¯æ¥ãVB.NETïŒç§ã®å¥œããªèšèªïŒã«ã€ããŠäœãæ°ããããšãåŠãã ããã«æããŸããã
ãããŠæåŸã«ãå°ãªããšã次ã®æéãç¯çŽã§ããããšãæåŸ ããŠã座ã£ãŠãéå»15幎éã«VB.NETã䜿çšããŠäœæããããšãåŠãã ããšãè³ããåãåºããŸããã
ãªã¹ãã«é²ãåã«ãåºæ¬çãªã«ãŒã«ã®æŠèŠã説æããŸãã
- ãã®ãªã¹ãã¯ãéåžžã®æå³ã§ã¯ç¶²çŸ çã§ã¯ãããŸããã 圌ã¯åŸ¹åºçã§ãã ãããã¯ãã¹ãŠã®éãã§ã¯ãããŸããã ãããã¯ãç§ãäžè¬çã«ç¥ã£ãŠããéããããã¹ãŠã§ã¯ãããŸããã ãããã¯ãç²ããããŠç¶è¡ã§ããªããŸã§ãæåã«èŠããŠããããšãã§ããéãã§ãã ç§ãåã䜿ãæãããŸã§ã ç§ãããªãã®èª°ããä»ã®éãã«åºäŒã£ããæãåºããããããããã®ãªã¹ããæŽæ°ãããŠããã ããŸãã
- VB 11ä»æ§ã®æåããå§ãããã®å 容ã䜿çšããŠäžã«ç§»åãããã®ãããã¯ã§æåã«æãæµ®ãã¶éããæãåºãããŸãã
- ããã¯ãCïŒã«ã¯ãªãVBã®é¢æ°ã®ãªã¹ãã§ã¯ãããŸããã ãããã£ãŠããXMLãªãã©ã«ãšãã€ã³ã¿ãŒãã¯ãããŸããã ããã¯ããããªããšã§ãããã€ã³ã¿ãŒãããäžã«ã¯ãã§ã«ãã®ãããªãªã¹ãããããããããŸãïŒãã®ãã¡ã®ããã€ãã¯ç§ãæžãããã®ã§ãããå°æ¥ã¯ãã£ãšæžãäºå®ã§ãïŒã ç§ã¯äž»ã«äž¡æ¹ã®èšèªã«é¡äŒŒããæ§é ã«çŠç¹ãåœãŠãŸãããããŠãç¥èã®ãªã芳å¯è ãããã2ã€ã®ããšã¯åãããã«æ¯ãèãããå°ããªãŸãã¯å€§ããªéããããããšã瀺åãããããããŸããã èŠãç®ã¯åããããããŸããããåäœãç°ãªãããæçµçã«ç°ãªãã³ãŒããçæãããŸãã
- ããã¯ãVBãšCïŒ ïŒç¡æ°ïŒ ã®æ§æäžã®éãã®ãªã¹ãã§ã¯ãããŸãã ã ç§ã¯äž»ã«æå³ã®éãïŒç©äºã®æå³ïŒã«ã€ããŠè©±ããæ§æã®éãïŒç©äºã®æžãæ¹ïŒã«ã€ããŠã¯è©±ããŸããã ãããã£ãŠããVB㯠'ã§ã³ã¡ã³ããéå§ããCïŒã¯//ã䜿çšããŸããããCïŒ_ã§æå¹ãªèå¥åã§ãããVBã§ã¯äœ¿çšã§ããŸãããã®ãããªéšåã¯ãããŸããã ããããããã€ãã®ã±ãŒã¹ã§ãã®èŠåãç ŽããŸãã çµå±ã®ãšãããä»æ§ã®æåã®ã»ã¯ã·ã§ã³ã¯åå¥èŠåã«é¢ãããã®ã§ãã
- ããªãé »ç¹ã«äŸãæããããæã«ã¯ãã¶ã€ã³ãäœããã®åœ¢ã§é²ãçç±ãæ£åœåããããšããããŸãã ããã€ãã®èšèšäžã®æ±ºå®ãç§ã®ç®ã®åã§äžãããŸããããå§åçå€æ°ãç§ã®æéãããå ã«è¡ãããŸããã
- ã³ã¡ã³ããæ®ãããç§ã«ãã€ãŒãïŒ @ThatVBGuy ïŒããŠããæ°ã«å ¥ãã®éããããã£ãšç¥ãããããšããç¥ãããã ããã
æåŸ ãå®çŸ©ããããã«é 延ããããšãªã...
å 容
é衚瀺ã®ããã¹ã
æ§æãšååŠç
- 1. VBã®ããŒã¯ãŒããšæŒç®åã¯å šè§æåã䜿çšã§ããŸã
- 2. VBã¯ã¹ããŒãã¯ã©ãŒãããµããŒãããŠããŸã
- 3.ååŠçå®æ°ã¯ãä»»æã®ããªããã£ãåïŒæ¥ä»ãå«ãïŒã§ãããä»»æã®å®æ°å€ãå«ãããšãã§ããŸã
- 4.åŒã®ååŠçã«ç®è¡æŒç®åã䜿çšã§ããŸã
ãç¥ãããªã©
- 5. VBã¯ãååã«ããã€ã³ã¿ãŒãã§ã€ã¹ã®æé»çãªæé»ã®å®è£ ãé²ãããã«ãILã®å®è£ ã®å®£èšãã¹ãããããããšããããŸã
- 6.ããã©ã«ãã§ã¯ãVBã¯ååãšçœ²åã§ã¯ãªãååïŒã·ã£ããŠïŒã§åºæ¬ã¯ã©ã¹ã®ã¡ã³ããŒãé衚瀺ã«ããŸãïŒãªãŒããŒããŒãïŒ
- 7. VB11以äžã¯ããžã§ããªãã¯ã®ä¿è·ãããã¡ã³ããŒã«å¯ŸããŠããå³æ Œã§ãã
- 8.å±æ§ã®æ§æãååä»ãåŒæ°ãã¯åžžã«ããããã£/ãã£ãŒã«ããåæåããŸã
- 9.ãããã¬ãã«ã®å®£èšã¯ãã¹ãŠïŒéåžžïŒããããžã§ã¯ãã®ã«ãŒãåå空éã«æé»çã«é 眮ãããŸãã
- 10.ã¢ãžã¥ãŒã«ã¯ILã§ã·ãŒã«ãããæœè±¡ã¯ã©ã¹ãšããŠçæãããªããããéçãªCïŒã¯ã©ã¹ã®ããã«ã¯èŠããŸããã
- 11. WinFormsã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ãïŒSub MainïŒã«æ瀺çãªã¡ãœããã¯å¿ èŠãããŸãã
- 12.å»æ¢ãããVBã©ã³ã¿ã€ã ã¡ãœããïŒããšãã°ãFileOpenïŒãåŒã³åºããšãåŒã³åºãå ã®ã¡ãœããã¯ãæ£ç¢ºæ§ã®ããã«ã€ã³ã©ã€ã³åãç¡å¹ã«ããå±æ§ã§æé»çã«ããŒã¯ãããŸãã
- 13.åãDesignerGeneratedå±æ§ã§ããŒã¯ãããæ瀺çãªã³ã³ã¹ãã©ã¯ã¿ãŒå®£èšãå«ãŸããŠããªãå Žåãããã©ã«ãã§çæãããã³ã³ãã€ã©ã¯ããã®åã«å¯ŸããŠå®çŸ©ãããŠããå ŽåãInitializeComponentãåŒã³åºããŸãã
- 14.éšå修食åã®æ¬ åŠã¯ãåãéšåçã§ã¯ãªãããšãæå³ãããã®ã§ã¯ãããŸãã
- 15.ããã©ã«ãã¯ã©ã¹ã§ã¯ããããªãã¯ã¢ã¯ã»ã¹ã¬ãã«ã¯ãã£ãŒã«ããé€ããã¹ãŠã®ãã®ã§ããããã£ãŒã«ãã®ãããªãã¯æ§é äœã§ãåæ§ã§ãã
- 16. VBã¯ãåºæ¬ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããåŸã«ãã£ãŒã«ããåæåããŸãããCïŒã¯åºæ¬ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããåã«ãã£ãŒã«ããåæåããŸã
- 17. VBã€ãã³ãã®æé»çã«å®£èšããããããã³ã°ãã£ãŒã«ãã¯ãCïŒãšã¯ç°ãªãååãæã¡ãååã§ã¢ã¯ã»ã¹ã§ããŸã
- 18. VB auto-propertiesã®æé»çã«å®£èšãããè£å©ãã£ãŒã«ãã«ã¯å ±éåãããããã®ååã§ã¢ã¯ã»ã¹ã§ããŸã
- 19.æé»çã«å®£èšããããã«ããŒèªã¿åãå°çšèªåããããã£ãã£ãŒã«ãã¯æžã蟌ã¿ãèš±å¯ããŸã
- 20.ã€ãã³ãå±æ§ã¯è£å©ã€ãã³ããã£ãŒã«ãã«æã é©çšãããŸã
説ææž
- 21.ã©ãã«ã®ã¹ã³ãŒãã¯ãã©ãã«ãå«ãã¡ãœããå šäœã®æ¬äœã§ãã ãããã¯å ã«ãžã£ã³ãã§ããŸãïŒãã¹ãŠã§ã¯ãããŸããïŒ
- 22.ããŒã«ã«å€æ°<>ã¹ã³ãŒãã®ã©ã€ãã¿ã€ã
- 23.å€æ°ã¯åžžã«ã察å¿ããã¿ã€ãã®ããã©ã«ãå€ã§åæåãããŸãã
- 24.è£å©ãã£ãŒã«ããnullã®å ŽåãRaiseEventã¯äŸå€ãã¹ããŒããŸãã
- 25.å²ãåœãŠã¯åžžã«åãã§ã¯ãããŸããã åç §åã®å²ãåœãŠãæµ ãã¯ããŒã³ãå®è¡ããå ŽåããããŸã
- 26.ã»ã¬ã¯ãã±ãŒã¹ã¯ãã©ãŒã«ã¹ã«ãŒããµããŒãããŠããŸããã äŒæ©ã¯å¿ èŠãããŸãã
- 27.åCaseãããã¯ã«ã¯ç¬èªã®ã¹ã³ãŒãããããŸã
- 28ã29ã30ãSelect Caseã¯éããªããã£ãåã§åäœãããã§ãã¯ã§ä»»æã®éå®æ°åŒã䜿çšã§ããããã©ã«ãã§ã¯=æŒç®åã䜿çšããŸãã
- 31.ã«ãŒãå ã§å®£èšãããå€æ°ã¯ãäœããã®æ¹æ³ã§å埩éã§æå³ãä¿æããŸã
- 32. 3ã€ã®Forã«ãŒãåŒã¯ãã«ãŒãã®éå§æã«1åã ãè©äŸ¡ãããŸãã
- 33. VBã®For Eachã«ãŒãã¯GetEnumeratoræ¡åŒµã¡ãœããã䜿çšã§ããŸã
æ§æãšååŠç
1.ããŒã¯ãŒããšVBæŒç®åã¯å šè§æåã䜿çšã§ããŸã
äžéšã®èšèªïŒæ£ç¢ºã«ã¯ããã€ãããã¯ããããŸããããå°ãªããšãäžéšã®åœ¢åŒã®äžåœèªãæ¥æ¬èªãéåœèªïŒã§ã¯å šè§æåã䜿çšãããŸãã èŠããã«ãããã¯ãïŒã»ãšãã©ã®ããã°ã©ããŒãããã§ããããã«ïŒåºå®å¹ ãã©ã³ãã䜿çšããå Žåã挢åã¯è¥¿ã§èŠãã©ãã³æåã®2åã®æ°Žå¹³ã¹ããŒã¹ãå ããããšãæå³ããŸãã äŸïŒ
ããã§ã¯ãæ¥æ¬èªã§æžãããå€æ°å®£èšãšãåããæ¥æ¬èªã§æžãããæååã«ããåæåããããŸãã Bingãã©ã³ã¹ã¬ãŒã¿ãŒã«ãããšãå€æ°ã¯ãæšæ¶ããšåŒã°ããè¡ã«ã¯ãHello WorldïŒããšè¡šç€ºãããŸãã æ¥æ¬èªã®å€æ°åã®é·ãã¯ããã2æåã§ãããæåã®ã³ã¡ã³ãã瀺ãããã«ãããŒããŒããéåžžæäŸãã4ã€ã®åè§æåã®ã¹ããŒã¹ãå æããŸãã æ°åã®å šè§ããŒãžã§ã³ãšãæ¥æ¬èªãšåãå¹ ã®ãã®ä»ã®å°å·ããããã¹ãŠã®ASCIIæåããããŸãã ãããå®èšŒããããã«ãå šè§æ°åã1ããšã2ãã䜿çšããŠ2çªç®ã®ã³ã¡ã³ããæžããŸããã ãããã¯ãæåã®ã³ã¡ã³ããšåãã1ããšã2ãã§ã¯ãããŸããã æ°åã®éã«ã¹ããŒã¹ã¯ãããŸããã ãŸããæåã®ãµã€ãºãæ£ç¢ºã«2æåã®å¹ ã§ã¯ãªããããããªãªãã»ãããããããšãããããŸãã ããã¯ããã®ããã°ã©ã ã1è¡ãš3è¡ãã¹ãŠã§å šè§æåãšåè§æåãæ··åšãããããã§ãã
空çœã¯åè§ãè±æ°åã¯å šè§ã§ãã ç§ãã¡ã¯ãããã¹ãã®é 眮ã«å€¢äžã§ãªãéããããã°ã©ããŒã§ã¯ãããŸããã ãããŠãããªããäžåœèªãæ¥æ¬èªãéåœèªïŒãŸãã¯èšèªã«ãã«ãµã€ãºã®æåã䜿çšããŠããä»ã®äººïŒã§ãæ¯åœèªã§æžãããèå¥åãŸãã¯æååã䜿çšããŠããå Žåããããã®å°ããªã¢ã©ã€ã¡ã³ããšã©ãŒã¯è ¹ç«ãããããã§ãã
ç§ã®ç¥ãéããæ¥æ¬èªããŒããŒãã«ãã£ãŠã¯ã象圢æåãšã©ãã³æåã®åãæ¿ãã¯ç°¡åã§ãããå šè§ã®ã©ãã³æåã䜿çšããããšããå§ãããŸãã VBã¯ãããŒã¯ãŒããã¹ããŒã¹ãæŒç®åãããã«ã¯åŒçšç¬Šã§ããããµããŒãããŸãã ãããã£ãŠãããã¯ãã¹ãŠæ¬¡ã®ããã«èšè¿°ã§ããŸãã
ã芧ã®ãšããããã®ããŒãžã§ã³ã§ã¯ãããŒã¯ãŒããã¹ããŒã¹ãã³ã¡ã³ããæŒç®åãåŒçšç¬Šã§ãããã«ãµã€ãºããŒãžã§ã³ã䜿çšããŠããŸãã ã«ãªã¹ã«ç§©åºãããããããŸããã
ã¯ã æ¥æ¬äººã¯VBã䜿çšããŸãã å®éãè±èªã«äŒŒãæ§æïŒããã³ãã®çç±ïŒã«ããããããããã©ãŒã©ã ã§èŠãã»ãšãã©ã®VBãŠãŒã¶ãŒã«ãšã£ãŠãè±èªã¯äž»èŠèšèªã§ã¯ãããŸããã ãã€ã¯ããœããã§ã®ä»äºäžã«ãç§ã¯æ¥æ¬ã®VB MVPã«äœåºŠãäŒããŸãããããã®ãã¡ã®å°ãªããšã1人ã¯çµ¶åã®åèåãæã£ãŠããŸããã ããªããäžåœãæ¥æ¬ãéåœïŒãŸãã¯å šè§æåã䜿çšãããã®ä»ã®åœïŒã®VBããã°ã©ããŒã§ããå Žåã¯ãã³ã¡ã³ãã«èšå ¥ããŠãã ããã ïŒèè ãžã®ã³ã¡ã³ãã®äžã§ã圌ãã¯ã³ãŒãã®ã©ãã§ãasciiã䜿çšããããšããŠãããšæžããŠããŸã- ãããPerã ïŒ
é¢çœãç¬éïŒç§ãæåã«VBã«è£éãããè¡ãå®è£ ãããšããç§ã¯ïŒæ®å¿µãªããšã«ïŒçœ®æã®å Žæã§ã®å šè§äžæ¬åŒ§ã®å¯èœæ§ãèæ ®ããŸããã§ããã Vladimir ReshetnikovïŒ @vreshetnikov ïŒã¯ãã®ãšã©ãŒãçºèŠããŠä¿®æ£ãããããæåå¹ ã«å¯ŸããVBãã¬ã©ã³ã¹ã®å倧ãªäŒçµ±ãæå¹ãªãŸãŸã§ããã
2. VBã¯ã¹ããŒãã¯ã©ãŒãããµããŒãããŠããŸã
ãã¡ãããããã¯äºçŽ°ãªããšã§ãããèšåã«å€ããŸãã 次ã®ãããªããã¹ãããã¥ã¡ã³ãã§ãµã³ãã«ã³ãŒããèŠãããšããããŸããã
ãããŠããµã³ãã«ãã³ãŒãã«ã³ããŒããåŸãWordã¯éåžžã®ASCIIåŒçšç¬Šããã¹ãŠ
â
ã¹ããŒãåŒçšç¬Š
â
眮ãæããŠãããããïŒåŒ·èª¿è¡šç€ºãããïŒåŒçšç¬Šãæ©èœããªãããšãããããŸããã
ããŸããã ããŠãç§ã¯ãããæã£ãŠããŸããããäŸãCïŒã«ã³ããŒãããšãã ãã§ãã VBã§ã¯ãã¹ããŒãã¯ã©ãŒãã¯æååã®æå¹ãªåºåãæåã§ãïŒãã·ã¢èªã®ã¯ã©ãŒããŒã·ã§ã³ããŒã¯
«»
ããªãããšã¯ãããããã§ã-çŽïŒã
ããããå¥åŠãªæ¹æ³ã§ãããæååã®å éšã§ãæ©èœããŸãã å·§åŠãªåŒçšç¬Šãäºéã«ããŠãšã¹ã±ãŒããããšãå®è¡æã«åŸãããã®ã¯åçŽãªïŒããã ãïŒåŒçšç¬Šã ãã§ãã ããã¯å°ãå¥åŠã«æãããããããŸããããããã§ãéåžžã«å®çšçã§ããã¹ããªã³ã°å ã§ã¯ãä»ã®ã»ãšãã©ã©ãã§ãã¹ããŒããªåŒçšç¬Šãèš±å¯ãããŠããããã§ãã ã³ã³ãã€ã©ãŒã¯ãå·§åŠãªåŒçšç¬Šã§çµããããã«åŒ·å¶ããããè³¢ãåŒçšç¬Šã§å§ããå Žåã¯æ£ããåŒçšç¬Šã䜿çšãããããããšã匷å¶ããªããããæ°ã«ããããšãªã奜ããªããã«æ··ããããšãã§ããŸãã ã¯ããããã¯ã³ã¡ã³ãã«äœ¿çšãããåäžåŒçšç¬Šæåã§ãæ©èœããŸãã
ããŒã«ã»ãŠã£ãã¯ïŒ @panopticoncntrl ïŒã«ãä»æ§ã®äœæäžã«ãã®åé¡ã«èŠããã ãšããçç±ã ãã§ãããè¡ã£ãããšãèªããããããšããŸãããã圌ã¯çœªæªæãåŠå®ããŸãã ããã¯VB6ã«ã¯åœãŠã¯ãŸããªããããåŸã§èª°ããè¿œå ããŸããã
3.ååŠçå®æ°ã¯ãä»»æã®ããªããã£ãåïŒæ¥ä»ãå«ãïŒã§ãããä»»æã®å®æ°å€ãå«ãããšãã§ããŸã
4.åŒã®ååŠçã«ç®è¡æŒç®åã䜿çšã§ããŸã
ãç¥ãããªã©
5. VBã¯ãååã«ããã€ã³ã¿ãŒãã§ã€ã¹ã®å¶çºçãªæé»ã®å®è£ ãé²ãããã«ãILã®å®è£ ã®å®£èšãã¹ãããããããšããããŸãã
ãã®ã¢ã€ãã ã¯ãå¯æã®ã«ããŽãªããã®ãã®ã§ãã VBã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã¯åžžã«æ瀺çã«è¡ãããŸãã ãã ããæ瀺çãªå®è£ ããªãå Žåãã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœãããåŒã³åºããšãã®CLRã®æ¢å®ã®åäœã¯ãååãšçœ²åã§ãããªãã¯ã¡ãœãããæ€çŽ¢ããããšã§ãã ã»ãšãã©ã®å Žåãããã¯æ£åžžã§ããVBã§ã¯ãéåžžãå®è£ ããã€ã³ã¿ãŒãã§ã€ã¹ã®åã¡ã³ããŒã«å®è£ ãæäŸããå¿ èŠããããŸããã1ã€ã®å Žåãé€ããŸãã
Interface IFoo Sub Bar() Sub Baz() End Interface Class Foo Implements IFoo Private Sub Bar() Implements IFoo.Bar Exit Sub End Sub Private Sub IFoo_Baz() Implements IFoo.Baz Exit Sub End Sub End Class Class FooDerived Inherits Foo Implements IFoo Public Sub Bar() Implements IFoo.Bar Exit Sub End Sub Public Sub Baz() ' Does something unrelated to what an IFoo.Baz would do. End Sub End Class
gist.github.com/AnthonyDGreen/39634fd98a0cacc093719ab62d7ab1e6#file-partial-re-implementation-vb
ãã®äŸã§ã¯ã
FooDerived
ã¯ã©ã¹ã¯
IFoo.Bar
ãæ°ããã¡ãœããã«åå²ãåœãŠããã ãã§ãæ®ãã®å®è£ ã¯å€æŽããªããŸãŸã«ããŠããŸãã ã³ã³ãã€ã©ãŒã
FooDerived
ã®implementsãã£ã¬ã¯ãã£ããåçŽã«çæããå ŽåãCLRã¯
FooDerived.Baz
ã®æ°ããå®è£ ãšããŠéžæã
IFoo.Baz
ïŒãã®äŸã§ã¯
IFoo
ãšã¯é¢ä¿ãããŸããïŒã CïŒã§ã¯ãããã¯æé»çã«è¡ãããŸãïŒãããŠãç§ã¯ãããæåŠã§ãããã©ããããããŸããïŒããVBã§ã¯ãã³ã³ãã€ã©ã¯ãããé¿ããããã«å®£èšå šäœããå®éã«ãå®è£ ããçç¥ããåå®è£ ãããç¹å®ã®ã¡ã³ããŒã®ã¿ããªãŒããŒã©ã€ãããŸãã ã€ãŸãã
IFoo
çŽæ¥
IFoo
ãããã©ãããå°ãããšãnoãšè¡šç€ºãããŸãã
ãªããããç¥ã£ãŠããã®ã§ããããªãéèŠãªã®ã§ããïŒ é·å¹Žã«ããããVBãŠãŒã¶ãŒã¯ãéåžžã¯ã³ãŒãçæã®ããã«ãã€ã³ã¿ãŒãã§ã€ã¹ã®æé»çãªå®è£ ïŒå宣èšã§æ瀺çã«
Implements
ãæå®ããã«ïŒã®ãµããŒããèŠæ±ããŠããŸããã
FooDerived.Baz
æé»çã«å®è£ ããããã«ãªã£ãããããããçŸåšã®æ§æã«çµã¿èŸŒãã ãã§å€§ããªå€åãçããã§ãããã ããããæè¿ã§ã¯ããæ¢å®ã®ã€ã³ã¿ãŒãã§ã€ã¹å®è£ ãæ©èœã®èšèšã«ãããæœåšçãªåé¡ãè°è«ãããšãã«ããã®åäœã«ã€ããŠããå€ãã®ããšãåŠã³ãŸãããããã«ãããã€ã³ã¿ãŒãã§ã€ã¹ã¯äžéšã®ã¡ã³ããŒã®æ¢å®ã®å®è£ ãå«ããããšãã§ããåã¯ã©ã¹ã§ã®åå®è£ ã¯äžèŠã«ãªããŸãã ããã¯ãããšãã°ãå®è£ ããã¹ãŠã®å®è£ è ã§åãã§ããå¯èœæ§ãé«ãå ŽåïŒã¡ã€ã³ã®ãªãŒããŒããŒããžã®å§ä»»ïŒããªãŒããŒããŒãã«åœ¹ç«ã¡ãŸãã å¥ã®ã·ããªãªã¯ããŒãžã§ã³ç®¡çã§ãã ã€ã³ã¿ãŒãã§ã€ã¹ã«ããã©ã«ãã®å®è£ ãå«ããããšãã§ããå Žåãå€ãå®è£ ãå£ããã«æ°ããã¡ã³ããŒãè¿œå ã§ããŸãã ããããåé¡ããããŸãã CLRã®ããã©ã«ãã®åäœã¯ååãšçœ²åã§ãããªãã¯å®è£ ãæ€çŽ¢ããããšã§ãããããVBã¯ã©ã¹ãããã©ã«ãå®è£ ã®ã€ã³ã¿ãŒãã§ãŒã¹ã¡ã³ããŒãå®è£ ããŠããªãããé©åãªååãšã·ã°ããã£ã®ãããªãã¯ã¡ã³ããŒãããå Žåãããããå®å šã«å®è£ ããŠãæé»çã«ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¡ã³ããŒãå®è£ ããŸãæ³å®ãããŠããŸããã ã³ã³ãã€ã«æã«ã€ã³ã¿ãŒãã§ã€ã¹ã¡ã³ãã®å®å šãªã»ãããããã£ãŠããå Žåããããåé¿ããããã«ã§ããããšããããŸãã ãã ããã³ãŒãã®ã³ã³ãã€ã«åŸã«ã¡ã³ããŒãè¿œå ãããå Žåã¯ãå®è¡æã«åäœãéãã«å€æŽããã ãã§ãã
6.ããã©ã«ãã§ã¯ãVBã¯ååãšçœ²åã§ã¯ãªãååïŒã·ã£ããŠïŒã§åºæ¬ã¯ã©ã¹ã®ã¡ã³ããŒãé衚瀺ã«ããŸãïŒãªãŒããŒããŒãïŒ
ãã®éãã¯ããç¥ãããŠãããšæããŸãã ã·ããªãªã¯æ¬¡ã®ãšããã§ããããããã³ã³ãããŒã«ããåºæ¬ã¯ã©ã¹ïŒ
DomainObject
ïŒãç¶æ¿ããã¯ã©ã¹ã®ã³ã³ããã¹ãã§æå³ã®ããååïŒ
DomainObject
ïŒã§ã¡ãœããã宣èšããŸãã
Class DomainObject End Class Class Invoice Inherits DomainObject Public Sub Print(copies As Integer) ' Sends contents of invoice to default printer. End Sub End Class
gist.github.com/AnthonyDGreen/863cfd1e7536fe8bda7cd145795eaf9f#file-shadows-example-vb
è«æ±æžãå°å·ã§ãããšããäºå®ã¯çã«ããªã£ãŠããŸãã ãã ããåºæ¬ã¯ã©ã¹ã宣èšãããŠããAPIã®æ¬¡ã®ããŒãžã§ã³ã§ã¯ããããã°ã®ããã«ããªããžã§ã¯ãã®ãã¹ãŠã®å 容ããããã°ãŠã£ã³ããŠã«è¡šç€ºããã¡ãœããããã¹ãŠã®DomainObjectsã«è¿œå ããããšã決å®ããŸãã ãã®ã¡ãœããã¯èŠäºã«PrintãšåŒã°ããŸãã åé¡ã¯ãAPIã®ã¯ã©ã€ã¢ã³ããInvoiceãªããžã§ã¯ãã«
Print()
ããã³
Print(Integer)
ã¡ãœãããããããšã«æ°ä»ããããããé¢é£ãããªãŒããŒããŒãã§ãããšèããå¯èœæ§ãããããšã§ãã ãã¶ããæåã®ãã®ã¯1éšã ããå°å·ããŸãã ããããããã¯ããªããInvoiceã®äœè ãšããŠèããããšã§ã¯ãããŸããã
DomainObject.Print
ã衚瀺ããããšã¯æããããŸããã§ããã ã¯ããããã¯VBã§ã¯æ©èœããŸããã ãã®ç¶æ³ããããã¢ãããããšãèŠåã衚瀺ãããŸãããããã«éèŠãªããšã¯ãVBã®ããã©ã«ãã®åäœã¯ååã§é衚瀺ã«ããããšã§ãã ã€ãŸãã
Overloads
ããŒã¯ãŒãã䜿çšããŠã
Print
ãåºæ¬ã¯ã©ã¹ã®
Print
Overloads
ã§ããããšãæ瀺çã«ç€ºããŸã§
Print
åºæ¬ã¯ã©ã¹ã®ã¡ã³ããŒïŒããã³ãã®ãªãŒããŒããŒãïŒã¯å®å šã«é衚瀺ã«ãªããŸãã æåã«å®£èšããAPIã®ã¿ãã¯ã©ã¹ã¯ã©ã€ã¢ã³ãã«è¡šç€ºãããŸãã ããã¯ããã©ã«ãã§æ©èœããŸãããShadowsããŒã¯ãŒãã䜿çšããŠæ瀺çã«å®è¡ã§ããŸãã CïŒã¯ïŒVBã©ã€ãã©ãªãåç §ããå Žåã¯
Shadows
ãèæ ®ããŸããïŒ
Overloads
ã®ã¿ãå®è¡ã§ããããã©ã«ãã§ã¯ïŒ
new
ããŒã¯ãŒãã䜿çšããŠïŒå®è¡ããŸãã ãã ããããã¯ã©ã¹ã1ã€ã®èšèªã§ãå¥ã®ã¯ã©ã¹ãå¥ã®èšèªã§å®çŸ©ãããŠãããããžã§ã¯ãã«ããã€ãã®ç¶æ¿éå±€ã衚瀺ããããªãŒããŒããŒããããã¡ãœãããããå Žåããã®éãã¯æã çŸããŸãããããã¯éãã®ãªã¹ãã®çŸåšã®é ç®ã®ç¯å²å€ã§ãã
7. VB11以äžã¯ããžã§ããªãã¯ã®ä¿è·ãããã¡ã³ããŒã«å¯ŸããŠããå³æ Œã§ãã
å®éãVS2013ãšVS2015ã®éã§ãããå€æŽããŸããã ç¹ã«ãåå®è£ ã«ç ©ããããªãããšã«ããŸããã ãã ããå€ãããŒãžã§ã³ã䜿çšããŠããŠããã«æ°ã¥ããå Žåã«åããŠããã®åºå¥ãæžããŠããŸãã ã€ãŸãããžã§ããªãã¯åã§ä¿è·ãããã¡ã³ããŒã宣èšãããŠããå Žåããžã§ããªãã¯ã§ãããçžç¶äººã¯ãåãååŒæ°ãæã€ç¶æ¿ãããã€ã³ã¹ã¿ã³ã¹ãä»ããŠã®ã¿ãã®ä¿è·ãããã¡ã³ããŒã«ã¢ã¯ã»ã¹ã§ããŸãã
Class Base(Of T) Protected x As T End Class Class Derived(Of T) Inherits Base(Of T) Public Sub F(y As Derived(Of String)) ' Error: Derived(Of T) cannot access Derived(Of String)'s ' protected members yx = "a" End Sub End Class
gist.github.com/AnthonyDGreen/ce12ac986219eb51d6c85fa02c339a2f#file-protected-in-generics-vb
8.å±æ§ã®æ§æãååä»ãåŒæ°ãã¯åžžã«ããããã£/ãã£ãŒã«ããåæåããŸã
VBã¯åãæ§æã䜿çšããŸã
:=
ã¡ãœããã®åŒæ°ãååã§æž¡ãå Žåãšåãããã«ãå±æ§ããããã£/ãã£ãŒã«ããåæåããŸãã ãããã£ãŠãååã§åŒæ°ãå±æ§ã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãæ¹æ³ã¯ãããŸããã
9.ãã¹ãŠã®ãããã¬ãã«å®£èšïŒéåžžïŒã¯ããããžã§ã¯ãã®ã«ãŒãåå空éã«æé»çã«é 眮ãããŸãã
ãã®éãã¯ã»ãšãã©ãé«åºŠãªæ©èœãã«ããŽãªã«ãããŸãããã³ãŒãã®æå³ãå€ããããããªã¹ãã«å«ããŸããã VBãããžã§ã¯ãã®ããããã£ã«ã¯æ¬¡ã®ãã£ãŒã«ãããããŸãã
ããã©ã«ãã§ã¯ãããã¯åã«äœææã®ãããžã§ã¯ãã®ååã§ãã ããã¯ãCïŒãããžã§ã¯ãã®ããããã£ã®ãããã©ã«ãåå空éããšåããã£ãŒã«ãã§ã¯ãããŸãã ã ããã©ã«ãã®ããŒã ã¹ããŒã¹ã¯ãCïŒã®æ°ãããã¡ã€ã«ã«ããã©ã«ãã§è¿œå ãããã³ãŒããèšå®ããã ãã§ãã ãã ããVBã®ã«ãŒãåå空éã¯ãç¹ã«æå®ããªãéãããã®ãããžã§ã¯ãã®ãã¹ãŠã®ãããã¬ãã«å®£èšããã®åå空éã«æé»çã«å«ãŸããããšãæå³ããŸãã ããããVBããã¥ã¡ã³ããã³ãã¬ãŒãã«åå空é宣èšãå«ãŸããªãçç±ã§ãã ããã«ãåå空é宣èšãè¿œå ãããšãã«ãŒãã¯ãªãŒããŒã©ã€ãããããã«ãŒãã«è¿œå ãããŸãã
Namespace Controllers ' Child namespace. End Namespace Namespace Global.Controllers ' Top-level namespace End Namespace
gist.github.com/AnthonyDGreen/fd1e5e3a58aee862a5082e1d2b078084#file-root-namespace-vb
ãããã£ãŠã
Controllers
åå空éã¯ã
VBExamples.Controllers
åå空éãå®éã«å®£èšããŸãããã ããåå空éã§æ瀺çã«
Global
ã宣èšããŠãã®ã¡ââã«ããºã ã
VBExamples.Controllers
ãªãéãã§ãã
ããã¯ãVBãã¡ã€ã«ããšã«1ã¬ãã«ã®ã€ã³ãã³ããš1ã€ã®äœåãªæŠå¿µãä¿åããã®ã§äŸ¿å©ã§ãã UWPã¢ããªã±ãŒã·ã§ã³ãäœæããå ŽåïŒUWPã®åå空éã«ãã¹ãŠãååšããå¿ èŠãããããïŒãããã¯ç¹ã«äŸ¿å©ã§ãããŸããRoslynã®ãããªã³ãŒãåãããããžã§ã¯ãå šäœã®æäžäœåå空éãå€æŽããå Žåã¯éåžžã«äŸ¿å©ã§ãããœãªã¥ãŒã·ã§ã³å ã®åãã¡ã€ã«ãæåã§æŽæ°ããå¿ èŠããªãããã
Microsoft.CodeAnalysis
ãªã©ã®ããé·ããªãªãŒã¹ã§ãã ãŸããã³ãŒããžã§ãã¬ãŒã¿ãŒãXAMLåå空éãããã³æ°ãã
.vbproj
ãã¡ã€ã«
.vbproj
䜿çšããå Žåã¯ããã®ç¹ã«çæããããšãéèŠ
.vbproj
ã
10.ã¢ãžã¥ãŒã«ã¯ãILã§å°å°ãããæœè±¡ã¯ã©ã¹ãšããŠçæãããªããããéçCïŒã¯ã©ã¹ãšãŸã£ããåãããã«ã¯èŠããŸããã
VBã®ã¢ãžã¥ãŒã«ã¯ãéçCïŒã¯ã©ã¹ã®åã«ååšããŠããŸãããã2010幎ã«ILã®èŠ³ç¹ããåãããã«ããããšããŸããã æ®å¿µãªãããããã¯é倧ãªå€æŽã§ããããã®ããŒãžã§ã³ã®.NETã®XMLã·ãªã¢ã©ã€ã¶ãŒïŒãŸãã¯ãã€ããªãŒã ã£ããããããŸãããïŒã¯ãäœæã§ããªãã£ãåïŒããã³æœè±¡ã¯ã©ã¹ïŒã«ãã¹ããããåãçŽååããããªãã£ãããã§ãã§ããŸããïŒã 圌ã¯äŸå€ãæããŸããã
äžéšã®ã³ãŒãã¯ã¢ãžã¥ãŒã«ã«åã蟌ãŸããåæåã䜿çšããŠãããããå€æŽãè¡ã£ãåŸã«ãããèŠã€ããŠããŒã«ããã¯ããŸããã ãŸããã³ã³ãã€ã«ãããããã°ã©ã ãã©ã®ããŒãžã§ã³ã®ã·ãªã¢ã©ã€ã¶ãŒã§åäœãããããããªããããã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ããŒãžã§ã³ã§åäœããä»ã®ããŒãžã§ã³ã§äŸå€ãã¹ããŒãããããããã¯åäœããŸããã
11. WinFormsã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ãïŒSub MainïŒã«æ瀺çãªã¡ãœããã¯å¿ èŠãããŸãã
ãããžã§ã¯ãããã©ãŒã ãéå§ãªããžã§ã¯ããšããŠäœ¿çšãããã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ãã䜿çšããªãå ŽåïŒè©³çŽ°ã¯æ¬¡ã®æçš¿ïŒãVBã¯éå§ãã©ãŒã ãäœæããŠ
Application.Run
ã«æž¡ã
Sub Main
çæãããã¡ã€ã«å šäœãä¿åããŸãããã®ããã»ã¹ã管çããã«ã¯ã
Form
è¿œå ã¡ãœããããŸãã¯ãã®åé¡ã«ã€ããŠèããå¿ èŠããããŸãã
12.å»æ¢ãããVBã©ã³ã¿ã€ã ã¡ãœããïŒããšãã°ãFileOpenïŒãåŒã³åºããšãåŒã³åºãå ã®ã¡ãœããã¯ãæ£ç¢ºæ§ã®ããã«ã€ã³ã©ã€ã³åãç¡å¹ã«ããå±æ§ã§æé»çã«ããŒã¯ãããŸãã
ã€ãŸãã
FileOpen
ãããªVB6ã¹ã¿ã€ã«ã®ãã¡ã€ã«ãæäœããæ¹æ³ã¯ãã³ãŒããé 眮ãããŠããã¢ã»ã³ããªã«åºæã®ã³ã³ããã¹ãã«äŸåããŠããŸãã ããšãã°ããã¡ã€ã«ïŒ1ã¯ããããããžã§ã¯ãã§ã¯ãã°ã«ãªããå¥ã®ãããžã§ã¯ãã§ã¯æ§æã«ãªããŸãã å®è¡ãããŠããã¢ã»ã³ããªã確èªããã«ã¯ã
Assembly.GetCallingAssembly()
åŒã³åºãããŸãã ããããJITãã¡ãœãããåŒã³åºãåŽã«ã€ã³ã©ã€ã³åãããšãã¹ã¿ãã¯ã®èŠ³ç¹ãããVBã©ã³ã¿ã€ã ã¡ãœããã¯ã¡ãœããã§ã¯ãªããåŒã³åºãåŽã«ãã£ãŠåŒã³åºãããŸããåŒã³åºãåŽã¯ç°ãªãã¢ã»ã³ããªå ã«ãããã³ãŒããåŒã³åºãåŽã®å éšç¶æ ã«ã¢ã¯ã»ã¹ãããéåãããããå¯èœæ§ããããŸããªããžã§ã¯ãã ããã¯ã»ãã¥ãªãã£äžã®åé¡ã§ã¯ãããŸãããããã»ã¹ã§åŠ¥åçãªã³ãŒããå®è¡ãããŠããå Žåããã§ã«å€±ãããŠããããã§ãã ããã¯æ£ç¢ºãã®åé¡ã§ãã ãããã£ãŠããããã®ã¡ãœããã䜿çšãããšãã³ã³ãã€ã©ãŒã¯ã€ã³ã©ã€ã³åãç¡å¹ã«ããŸãã
ãã®å€æŽã¯2010幎ã®æåŸã®æç¹ã§è¡ãããŸãããx64JITã¯ã³ãŒãã®ã€ã³ã©ã€ã³å/æé©åã«éåžžã«ç©æ¥µçã§ãããéåžžã«é ããæãå®å šãªãªãã·ã§ã³ã§ããããšãããã£ãããã§ãã
13.åãDesignerGeneratedå±æ§ã§ããŒã¯ãããæ瀺çãªã³ã³ã¹ãã©ã¯ã¿ãŒå®£èšãå«ãŸããŠããªãå Žåããã®åã«å¯ŸããŠå®çŸ©ãããŠããå Žåãããã©ã«ãã§çæãããã³ã³ãã€ã©ã¯InitializeComponentãåŒã³åºããŸã
éšååã®åã®æ代ãVBããŒã ã¯WinFormsãããžã§ã¯ãã®å®åã³ãŒããæžããããã«æŠäºãç¹°ãåºããŸããã ãããã
Partial
ãã£ãŠããçæããããã¡ã€ã«ã§ã³ã³ã¹ãã©ã¯ã¿ãŒãå®å šã«çç¥ã§ãããŠãŒã¶ãŒã¯å¿ èŠã«å¿ããŠãã¡ã€ã«ã§æåã§å®£èšããããããã§ãªãå Žåã¯å®£èšããªãããã䟿å©ã§ãã ããããªããšããã¶ã€ããŒã¯
InitializeComponent
ãåŒã³åºãããã ãã«ã³ã³ã¹ãã©ã¯ã¿ãè¿œå ããããšãäœåãªãããããŠãŒã¶ãŒãè¿œå ããå Žåããããã¯éè€ããŸãããŸãã¯ãããŒã«ãããã¯ããã¶ã€ããŒããã¶ã€ããŒãã¡ã€ã«ãããŠãŒã¶ãŒã®ãã®ã«ç§»åãããã¶ã€ããŒã§æ¢ã«åçæããªãããã«ããå¿ èŠããããŸããŠãŒã¶ãŒãã¡ã€ã«ã«ååšããŸãã
14.éšå修食åã®æ¬ åŠã¯ãåãéšåçã§ã¯ãªãããšãæå³ãããã®ã§ã¯ãããŸãã
æè¡çã«ã¯ãVBã§ã¯ã1ã€ã®ã¯ã©ã¹ã®ã¿ãéšåãšããŠããŒã¯ããå¿ èŠããããŸãã ããã¯éåžžïŒGUIãããžã§ã¯ãã§ã¯ïŒçæããããã¡ã€ã«ã§ãã
ãªãã§ïŒ ããã«ããããŠãŒã¶ãŒãã¡ã€ã«ã¯çŸãããããã«ä¿ãããçæãããã³ãŒãã«ã«ã¹ã¿ã ã³ãŒããçæãŸãã¯è¿œå ããåŸã«å«ãããšéåžžã«äŸ¿å©ã§ãã ãã ããæ倧ã§1ã€ã®ã¯ã©ã¹ã«éšå修食åããªãããšããå§ãããŸããããããªããšãèŠåãçºè¡ãããŸãã
15.ããã©ã«ãã¯ã©ã¹ã§ã¯ããããªãã¯ã¢ã¯ã»ã¹ã¬ãã«ã¯ãã£ãŒã«ããé€ããã¹ãŠã®ãã®ã§ããããã£ãŒã«ãã®ãããªãã¯æ§é äœã§ãåæ§ã§ãã
ç§ã¯ããã«ã€ããŠè€éãªæ°æã¡ãæã£ãŠããŸãã CïŒã§ã¯ããã¹ãŠãããã©ã«ãã§
private
ïŒæ声ãã«ãã»ã«åïŒïŒã§ãããé »ç¹ã«å®£èšããå 容ïŒãããªãã¯ã³ã³ãã©ã¯ããŸãã¯å®è£ ã®è©³çŽ°ïŒã«å¿ããŠå®è¡ããåŒæ°ããããŸãã éåžžãããããã£ãšã€ãã³ãã¯å€éšïŒ
public
ïŒã§ã®äœ¿çšãç®çãšããŠãããæŒç®åã¯
public
以å€ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã ãã ããããã©ã«ãã®ã¢ã¯ã»ã·ããªãã£ã«äŸåããããšã¯ã»ãšãã©ãããŸããïŒãã®èšäºã®äŸã®ãããªãã¢ãé€ããŸãïŒã
16. VBã¯ãåºæ¬ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããåŸã«ãã£ãŒã«ããåæåããŸãããCïŒã¯åºæ¬ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããåã«ãã£ãŒã«ããåæåããŸã
ã³ã³ã¹ãã©ã¯ã¿ãŒã§æåã«çºçããã®ã¯ãåºæ¬ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®åŒã³åºãã§ãããšãããäžéšãã®çºèšãèããããšããããŸããïŒ ãŸããå°ãªããšãCïŒã§ã¯ããã§ã¯ãããŸããã CïŒã§ã¯ãæ瀺çãŸãã¯æé»çã«
base()
åŒã³åºãåã«ããã£ãŒã«ãåæååãæåã«å®è¡ããã次ã«ã³ã³ã¹ãã©ã¯ã¿ãŒåŒã³åºãã次ã«ã³ãŒããå®è¡ãããŸãã ãã®æ±ºå®ã«ã¯çµæããããèšèªéçºè ãã©ãã«ãããŠè¡ãããšãã§ããçç±ãç¥ã£ãŠãããšæããŸãã ãããã®çµæã®1ã€ã¯ã次ã®ã³ãŒããCïŒã«çŽæ¥å€æã§ããªãããšã§ãã
Imports System.Reflection Class ReflectionFoo Private StringType As Type = GetType(String) Private StringLengthProperty As PropertyInfo = StringType.GetProperty("Length") Private StringGetEnumeratorMethod As MethodInfo = StringType.GetMethod("GetEnumerator") Private StringEnumeratorType As Type = StringGetEnumeratorMethod.ReturnType Sub New() Console.WriteLine(StringType) End Sub End Class
gist.github.com/AnthonyDGreen/37d01c8e7f085e06172bfaf6a1e567d4#file-field-init-me-reference-vb
Reflectionã«åŸäºããŠããé ãç§ã¯ãããã®ãããªã³ãŒããæžããŸããã ãããŠãMicrosoftïŒJoshïŒãç§ã®ã³ãŒããCïŒã«ç¿»èš³ããåã«ãç§ã®åæååããã¹ãŠã³ã³ã¹ãã©ã¯ã¿ãŒã«ç§»æ€ããå¿ èŠããããšäžå¹³ãèšãååãæŒ ç¶ãšæãåºããŸãã CïŒã§ã¯ã
base()
ãåŒã³åºãããåã«äœæããããªããžã§ã¯ããåç §ããããšã¯çŠæ¢ãããŠããŸãã ãŸãããã£ãŒã«ãåæååã¯æå®ãããåŒã³åºãã®åã«å®è¡ããããããä»ã®ãã£ãŒã«ãããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã®ã¡ã³ããŒãåç §ããããšãã§ããŸããã ãããã£ãŠããã®äŸã¯VBã§ãæ©èœããŸãã
MustInherit Class Base ' OOP OP? Private Cached As Object = DerivedFactory() Protected MustOverride Function DerivedFactory() As Object End Class Class Derived Inherits Base Protected Overrides Function DerivedFactory() As Object Return New Object() End Function End Class
gist.github.com/AnthonyDGreen/fe5ca89e5a98efee97ffee93aa684e50#file-base-derived-init-vb
ããã«ã¯ãããããå€ãã®æ©èœãåããåºæ¬ã¯ã©ã¹ããããŸããã管çãäœæ¥ã®ããã«ããã€ãã®éèŠãªãªããžã§ã¯ããå¿ èŠã§ããã掟çåã«ãã£ãŠæ±ºå®ãããŸãã ãã®ãããªãã³ãã¬ãŒããå®è£ ããã«ã¯å€ãã®æ¹æ³ããããŸãããéåžžã¯æ¬¡ã®çç±ã§ããã䜿çšããŸãã
- 圌ã¯èãäœãã
- ã³ã³ã¹ãã©ã¯ã¿ãŒã宣èšããå¿ èŠã¯ãããŸããã
- åæåã³ãŒããã³ã³ã¹ãã©ã¯ã¿ãŒã«é 眮ããå¿ èŠã¯ãããŸããïŒååšããå ŽåïŒã
- äœæããããªããžã§ã¯ãããã£ãã·ã¥ããããšãã§ããæäŸããããªããžã§ã¯ãã®ã¹ãã¬ãŒãžã宣èšããã³ç®¡çããããã«æŽŸçåãå¿ èŠãšããŸããããä»ã§ã¯ããã¯èªåããããã£ã®åé¡ã§ã¯ãããŸããã
ããã«ãç§ã¯äž¡æ¹ã®ç¶æ³ã«ãããŸããïŒæŽŸçåã®ãã£ãŒã«ããåºæ¬ã¯ã©ã¹ã§å®£èšãããã¡ãœãããåŒã³åºããããšããããã³ãã£ãŒã«ãã¯ã©ã¹åæååã掟çåã«ãã£ãŠå®è£ ããã
MustOverride
ã¡ã³ããŒãåŒã³åºãå¿ èŠããããšãã ã©ã¡ããVBã§æå¹ã§ãããCïŒã§ã¯æå¹ã§ã¯ãããŸãããããã¯çã«ããªã£ãŠããŸãã CïŒãã£ãŒã«ãåæååãåºæ¬ã¯ã©ã¹ã®ã¡ã³ããŒãåŒã³åºãããšãã§ããå Žåããã®ã¡ã³ããŒã¯åºæ¬ã³ã³ã¹ãã©ã¯ã¿ãŒïŒãŸã å®è¡ãããŠããªãïŒã§åæåããããã£ãŒã«ãã«äŸåããå¯èœæ§ããããçµæã¯ã»ãŒééããªãäžæ£ç¢ºã§ããããããåé¿ããæ¹æ³ã¯ãããŸããã§ããã
ããããVBã§ã¯ãããŒã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã¯æ¢ã«æ©èœããŠããã®ã§ãäœã§ãã§ããŸãïŒ å察ã®ç¶æ³ã§ã¯ãåºæ¬ã¯ã©ã¹ã®åæååïŒãŸãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒïŒãã
Overridable
ã¡ã³ããŒãåŒã³åºããšããã£ãŒã«ãããåæåããããåã«ã¢ã¯ã»ã¹ã§ããããããã¹ãŠãå°ãè€éã«ãªããŸãã ãã ãããããåé¡ã§ãããã©ããã¯å®è£ ã®ã¿ãç¥ã£ãŠããŸãã ç§ã®ã¹ã¯ãªããã§ã¯ãããã¯èµ·ãããŸããã ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ã«ã¯äŸåããŸãããããã®èšäºã®ç¯å²å€ã®æè¡çãªçç±ã§ãã©ã®èšèªã§ã
Shared Overridable
ã¡ã³ããŒãæã€ããšã¯ã§ããªãããã
Shared
ã¡ã³ããŒã«ããããšã¯ã§ããŸããã ããã«ãã«ã¹ã¿ã åæååãéå§ããåã«ãã£ãŒã«ãã«äœãèµ·ããããæ確ã«å®çŸ©ãããŠããŸã-VBã®ãã¹ãŠã®å€æ°ã®ããã«ãããã©ã«ãå€ã§åæåãããŸãã é©ãã¯ãããŸããã
ãªãã§ããïŒ å®éãç§ã®ã¹ã¯ãªããããå ã®VB.NETããŒã ãèšèšæã«å¿µé ã«çœ®ããŠãããã®ãã©ããã¯ããããŸããã ç§ã®å Žåã¯ããŸããããŸãïŒ , : VB , , . . .
, , , C# VB, , VB , C#.
17. (backing field) VB , C#,
( ).
E
, VB ( IDE)
EEvent
. C#
E
, ,
E
, .
18. VB
P
,
_P'
. IntelliSense, . C# «» ( mangled ) , , C# .
ãªããã VB , -, «WithEvents», -, , - , .
19. read-only
, , âŠ. VB « » .
WithEvents
-, non-Custom , , . IntelliSense, , , . FTW! , VB , private set; C#.
Class Alarm Private ReadOnly Code As Integer ReadOnly Property Status As String = "Disarmed" Sub New(code As Integer) Me.Code = code End Sub Sub Arm() ' I'm motifying the value of this externally read-only property here. _Status = "Armed" End Sub Function Disarm(code As Integer) As Boolean If code = Me.Code Then ' And here. _Status = "Disarmed" Return True Else Return False End If End Function End Class
gist.github.com/AnthonyDGreen/57ce7962700c5498894ad417296f9066#file-read-only-auto-property-backing-field-is-writeable-vb
20.
,
NonSerialized
.
VB (expanded) Custom- 2005 (?) , , ,
NonSerialized
. , , , , «» , « ».
, , , , . , , , , two-way bindable ( ,
PropertyChanged
), , , , , .
, , CLSA «Expert Business Objects» (Rocky Lhotka) , undo/redo ( , , - , , ), . , . , , , .
21. â , ; ( )
,
GoTo
. , - . ,
For
For Each
;
Using
,
SyncLock
With
, , ,
Finally
.
If
Select Case
,
Do
While
, Try â , :
Module Program Sub Main() Dim retryCount = 0 Try Retry: ' IO call. Catch ex As IO.IOException When retryCount < 3 retryCount += 1 GoTo Retry End Try End Sub End Module
gist.github.com/AnthonyDGreen/b93adcf3c3705e4768dcab0b05b187a0#file-try-goto-retry-vb
, , , .NET VB «». VB6 Quick Basic ( ) . QB, . , « », . GoTo, â , .
:
Try
, VB -
await
Catch
Finally
, ,
GoTo
.
22. <>
, VB ( ) (
static
) ( ). , .
Catch
3 .
Try
Catch
, , ,
Try
.
, VB.NET , . CLR VB . : , .
, C# , , «». VB.NET .
23.
, , C# « » ( definite assignment ). , , , « ». , ( ) , , . C/C++. , ! , . , , , â . , , , , , , , , . , BASIC , , «» ,
= Nothing
,
= 0
,
= False
..
, ( flow analysis ) VB , .
, C# , , , . VB , , , . Roslyn, , API « », , .
24. RaiseEvent , null
, - C# VB.
RaiseEvent
VB â ,
null
( ),
null
- â , .
' You don't have to write this: If PropertyChangedEvent IsNot Nothing Then RaiseEvent PropertyChanged(Me, e) End If ' You don't have to write this: Dim handlers = PropertyChangedEvent If handlers IsNot Nothing Then handlers(Me, e) End If ' You don't have to write this either: PropertyChangedEvent?(Me, e) ' Just write this: RaiseEvent PropertyChanged(Me, e)
gist.github.com/AnthonyDGreen/c3dea3d91ef4ffc50cfa92c41f967937#file-null-safe-event-raising-vb
, null-conditional C# VS2015 C# , VB ( ), , ; VB.NET .
25. ; (shallow clone)
, , 17 , , . (boxed) Object,
System.Runtime.CompilerServices.RuntimeHelper.GetObjectValue
. , CLR. , :
- , .
- , (, Integer ), .
- , .
, , , , ( late-bound situations ). , , ( ) , , , , ( caller's copy ). , , - , â .
. :
Class MyEventArgs Property Value As Object End Class Structure MyStruct Public X, Y As Integer End Structure Module Program Sub Main() Dim defaultValue As Object = New MyStruct With {.X = 3, .Y = 5} Dim e = New MyEventArgs With {.Value = defaultValue} RaiseEvent DoSomething(Nothing, e) If e.Value Is defaultValue Then ' No handlers have changed anything. Console.WriteLine("Unchanged.") End If End Sub Event DoSomething(sender As Object, e As MyEventArgs) End Module
gist.github.com/AnthonyDGreen/422ac4574af92d9bbbf59f0fbc40b74d#file-get-object-value-vb
, WPF, . , . , , . , . , - , , , .
, , « » . IronRuby/Python,
dynamic
C# ( C#): C#
GetObjectValue
.
object.ReferenceEquals
, , , -
dynamic
C# ( ).
==
, . C#, , .
26. Select Case «» (fall-through); break
Friday , Sunday â , 5 .
Module Program Sub Main() Select Case Today.DayOfWeek Case DayOfWeek.Monday: Case DayOfWeek.Tuesday: Case DayOfWeek.Wednesday: Case DayOfWeek.Thursday: Case DayOfWeek.Friday: Console.WriteLine("Weekday") Case DayOfWeek.Saturday: Case DayOfWeek.Sunday: Console.WriteLine("Weekend") End Select End Sub End Module
gist.github.com/AnthonyDGreen/7b7e136c71dd11b2417a6c7267bb3546#file-select-case-no-fallthrough-vb
Roslyn C# , - : «, ? !» «, » . . VS , , , , , . !
. C# , C, C. . , C# , case . - ,
goto
,
break
. VB
break
,
Exit Select
, , VB .
27. Case
, . C#, :
Module Program Sub Main() Select Case Today.DayOfWeek Case DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday Dim message = "Get to work!" Case DayOfWeek.Saturday, DayOfWeek.Sunday Dim message = "Funtime!" End Select End Sub End Module
gist.github.com/AnthonyDGreen/bd642061896246c9336255881fb78546#file-select-case-scopes-vb
,
message
, C#
switch
case
â . . , , - ( , C): , , , , .
28, 29, 30. Select Case , =
, , , ,
Select Case
.
, , . :
, 26-30.
switch
, , , ,
if
. IL
switch
, ,
If
, VB , . switch , , C . VB .
31. , ,
x
, , -1, -2, -3:
Module Program Sub Main() For i = 1 To 3 Dim x As Integer x -= 1 Console.WriteLine(x) Next End Sub End Module
gist.github.com/AnthonyDGreen/cbc3a9c70677354973d64f1d993a3c5d#file-loop-variables-retain-their-values-vb
« , , » ( ). , VB2008 , -:
Module Program Sub Main() Dim lambdas = New List(Of Action) For i = 1 To 3 Dim x As Integer x -= 1 lambdas.Add(Sub() Console.WriteLine(x)) Next For Each lambda In lambdas lambda() Next End Sub End Module
gist.github.com/AnthonyDGreen/2ef9ba3dfcf9a1abe0e94b0cde12faf1#file-loop-variables-captured-per-iteration-vb
-1, -2, -3.
x
â « », -
x
, . ,
x
. flow analysis API â ! ( «⊠⊠?» )
ãªãã§ïŒ , , , , , #22. , , -, .
, VB C# ( control variables )
For Each
VS2012 (?), - « ». 10000% , ( , VB , ). , VB
For
, . , . , VB
For
For Each
,
for
foreach
C#. ,
For
VB - , , .
32. For
For
. , , 1,3,5,7,9, , .
Module Program Sub Main() Dim lower = 1, upper = 9, increment = 2 For i = lower To upper Step increment Console.WriteLine(i) upper += 1 increment -= 1 Next End Sub End Module
gist.github.com/AnthonyDGreen/1e48113be204f515c51e221858666ac7#file-for-loop-bounds-cached-vb
, ( ), , , ,
IndexOutOfRangeExceptions
, .
, , , , , C, VB . - , VB ,
For i = a To b Step c
( ,
i> b
) ( ,
i <b
),
c
? , , ,
b
, â . , , , , .
33. For Each VB GetEnumerator
For Each
,
IEnumerable
,
GetEnumerator
,
For Each
.
, ,
For Each
IEnumerator
, , :
Module Program Sub Main() Dim list = New List(Of Integer) From {1, 2, 3, 4, 5} Dim info = list.FirstAndRest() If info.First IsNot Nothing Then Console.Write(info.First.GetValueOrDefault()) For Each other In info.Additional Console.Write(", ") Console.Write(other) Next Console.WriteLine() End If End Sub <Runtime.CompilerServices.Extension> Function FirstAndRest(Of T As Structure)(sequence As IEnumerable(Of T)) As (First As T?, Additional As IEnumerator(Of T)) Dim enumerator = sequence.GetEnumerator() If enumerator.MoveNext() Then Return (enumerator.Current, enumerator) Else Return (Nothing, enumerator) End If End Function <Runtime.CompilerServices.Extension> Function GetEnumerator(Of T)(enumerator As IEnumerator(Of T)) As IEnumerator(Of T) Return enumerator End Function End Module
gist.github.com/AnthonyDGreen/d7dbb7a5b98a940765c4adc33e3eaeee#file-for-each-extension-get-enumerator-vb
F# ,
IEnumerator
,
For Each
, .
VB , ( well-known name ), . , , Add, . C# , (.
async
/
await
). , C# Roslyn () , .
åºåã®åã 15-16 - .NET- DotNext 2019 Piter . , . , . .