Upgrade to Pro — share decks privately, control downloads, hide ads and more …

C# 5.0までの自分なりのメモとか

C# 5.0までの自分なりのメモとか

かなり前に書いた自分用のC#メモ。

Es_Program

March 25, 2016
Tweet

More Decks by Es_Program

Other Decks in Programming

Transcript

  1. C#ͱ͸ C#ͷίʔυ͸(.NET Framework ʹରԠͨ͢͠΂ͯͷݴޠ͸) IL (Intermediate Language)ʹίϯύΠϧ͞ΕΔ(ILίʔυ/ϝλσʔλ /CLRϔομ/PE32·ͨ͸PE32+ϔομΛؚΉ.exe) ੜ੒ͨ͠IL͸Windows ͷ

    CLR(Common Language Runtime)্Ͱ ࣮ߦ͞ΕΔ CLR͸CLI(Common Language Infrastructure)ͱ͍͏ILΛωΠςΟ ϒίʔυʹม׵͢ΔͨΊͷ࢓༷ͷ͜ͱɻCLIΛWindows༻ʹ࣮૷ ͨ͠ͷ͕CLR Linux ൛ͷ CLIΛ࣮૷ͨ͠΋ͷʹɺMonoͱ͍͏ͷ΋͋Δ
  2. ܕ

  3. isԋࢉࢠ ΦϒδΣΫτ͕ࢦఆ͞Εͨܕͱޓ׵ੑ͕͋Δ ͔ΛBooleanܕͰฦ͢(ྫ֎Λ཈੍ग़དྷΔ) ΦϒδΣΫτࢀর͕nullͷ৔߹͸ৗʹfalseΛฦ ͢ var  s  =  "͍͋͏͓͑";  

    if(s  is  String)        Console.WriteLine("stringܕ");   else        Console.WriteLine(“!stringܕ");   ݁Ռɿstringܕ string  s  =  null;   if(s  is  String)        Console.WriteLine("stringܕ");   else        Console.WriteLine(“!stringܕ");   ݁Ռɿ!stringܕ
  4. isԋࢉࢠ͸ύϑΥʔϚϯεࡴ͠ʁ CLR͸࣮͸̎ճܕΛݕ͍ࠪͯ͠Δ isԋࢉࢠͰ1ճ ΩϟετͰ1ճ class  A  {  public  void  Hello()

     {  Console.WriteLine("HelloA");  }  }   class  B  :  A  {  new  public  void  Hello()   {  Console.WriteLine("HelloB");  }  }   static  void  Main(string[]  args)   {          B  b  =  new  B();          b.Hello();          if(b  is  A)          {                  A  a  =  (A)b;                  a.Hello();          }   }
  5. asԋࢉࢠͰ1ճͷݕࠪ class  A  {  public  void  Hello()  {  Console.WriteLine("HelloA");  }

     }   class  B  :  A  {  new  public  void  Hello()  {  Console.WriteLine("HelloB");  }  }   static  void  Main(string[]  args)   {          B  b  =  new  B();          A  a  =  b  as  A;          if(a  !=  null)                  a.Hello();   } ݕࠪճ਺͸1ճʹͳ͍ͬͯΔͷͰ ύϑΥʔϚϯε͸ྑ͘ͳΔ
  6. C#ͷΩʔϫʔυ ܕ ϝιου/ϓϩύςΟ/Πϕϯτ ఆ਺/ϑΟʔϧυ abstract ͦͷܕͷΠϯελϯεΛ࡞੒ग़དྷͳ ͍ ೿ੜܕͷΠϯελϯεΛ࡞੒Մೳʹ ͢Δʹ͸ɺ೿ੜܕͰ͜ͷϝϯόΛΦ ʔόʔϥΠυ࣮ͯ͠૷͠ͳ͚Ε͹ͳ

    Βͳ͍ (࢖༻ग़དྷͳ͍) virtual (࢖༻ग़དྷͳ͍) ͜ͷϝϯόΛ೿ੜܕͰΦʔόʔϥΠ υग़དྷΔ͜ͱΛࣔ͢ (࢖༻ग़དྷͳ͍) override (࢖༻ग़དྷͳ͍) ೿ੜܕ͕جఈܕͷϝϯόΛΦʔόʔ ϥΠυग़དྷΔࣄΛࣔ͢ (࢖༻ग़དྷͳ͍) seald ͦͷܕΛجఈܕͱͯ͠࢖༻ग़དྷͳ͍ ࣄΛࣔ͢ ϝϯό͕೿ੜܕʹΑͬͯΦʔόʔϥ Πυग़དྷͳ͍ࣄΛࣔ͢ɻ͜ͷΩʔϫ ʔυ͸Ծ૝ϝιουΛΦʔόʔϥΠ υ͍ͯ͠ΔϝιουʹͷΈద༻Մೳ (࢖༻ग़དྷͳ͍) new ೖΕࢠʹ͞ΕͨܕɺϝιουɺϓϩύςΟɺΠϕϯτɺఆ਺ɺ·ͨ͸ϑΟʔϧυʹద༻͞ΕΔͱɺجఈΫϥεʹଘ ࡏ͢Δಉ͡छྨͷϝϯόͱແؔ܎Ͱ͋Δ͜ͱΛࣔ͢
  7. ؆୯ͳδΣωϦοΫྫ public  static  T  Max<T>(T  a,T  b)      

                       where  T  :  IComparable                  {                          return  a.CompareTo(b)  >  0  ?  a  :  b;                  } where۟Λ࢖͏ࣄͰɺܕʹ͍ͭ ੍ͯ໿ΛՃ͑Δࣄ΋ग़དྷΔ http://ufcpp.net/study/csharp/sp2_generics.html
  8. δΣωϦοΫΫϥεͷstaticϑΟʔϧυ͸ܧঝʹ Αͬͯڞ༗͞Εͳ͍     private  class  StaticClassBase<T>      

    {         private  static  bool  test;         public  static  bool  Test  {  get  {  return  test;  }  set  {  test  =  value;  }  }       }       private  class  StaticClass1  :  StaticClassBase<StaticClass1>       {       }       private  class  StaticClass2  :  StaticClassBase<StaticClass2>       {       }       private  void  Action()       {         //GenericΫϥεΛܧঝͨ͠৔߹ɺStaticม਺͸ڞ༗͞Εͯͳ͍ɻ         //ཧ༝ɿGenericΫϥε͸ɺςΩετੜ੒༻ͷϚΫϩػೳͷΑ͏ͳ΋ͷͰ͋ΔͨΊɻ         //ͭ·ΓɺίϯύΠϧ࣌ʹ         //ɹɾɹStaticClassBase<StaticClass1>         //ɹɾɹStaticClassBase<StaticClass2>         //ͱ͍͏2ͭͷܕ͕ͦΕͧΕ࡞ΒΕΔ͜ͱʹͳΔɻ         //ͳͷͰɺstaticͳtestϑΟʔϧυ͸ͦΕͧΕͷΫϥεͰ࡞ΒΕΔͨΊڞ༗͞Εͳ͍ɻ         StaticClass1.Test  =  true;         Console.WriteLine(StaticClass1.Test.ToString())//True;         Console.WriteLine(StaticClass2.Test.ToString())//False;       }
  9. ڞมੑͷྫ        class  Test        

     {                  static  void  Main(string[]  args)                  {                          //stringܕͷҾ਺Λobjectܕʹͯ͠ฦ͚ͩ͢ͷσϦήʔτ                          Func<string,  object>  ParseObj  =  x  =>  x;                  }          } ஫ҙ͢΂͖͸ɺσϦήʔτʹରͯ͠୅ೖग़དྷΔͷ͸ ೿ੜ ΫϥεΛ໭Γ஋ͱ͢ΔϝιουͰ͋Δͱ͍͏͜ͱɻ
  10. ྫ͑͹ Action<string>͸Ҿ਺ʹstringܕΛࢦఆͯ͠ॲཧΛ͢Δ΋ͷͰ͋Δ͔ ΒɺҾ਺ʹ͸ʮ”จࣈ”ʯͷΑ͏ͳ΋ͷΛࢦఆग़དྷΔ Action<object>͸Ҿ਺ʹobjectܕΛࢦఆͯ͠ॲཧΛ͢Δ΋ͷͳͷ Ͱɺ[“จࣈ”]ͷΑ͏ͳ΋ͷΛࢦఆ͢Δࣄ΋ग़དྷΔ Action<object> objAction = x =>

    { Console.Write(x); }; Action<string> strAction = objAction; stringΛҾ਺ʹऔΔstrActionʹରͯ͠ɺobjActionΛ୅ೖ͢ Δࣄ͕ग़དྷΔཧ༝͸ɺobjActionͷҾ਺ʹstringܕΛࢦఆ͠ ͯ΋ྑ͍ͨΊ(μ΢ϯΩϟετͳͷͰ҆શ)
  11. ࢖͏৔߹Ͱߟ͑Δ strAction("str")ʹ஫໨͢ΔͱɺҾ਺͸stringܕͰ͋Δɻ strAction಺ͷobjActionͰ͸ɺ͜ͷ”str”Λ҉໧తʹμ΢ϯΩϟε τ͢Δ objActionͰ͸Ҿ਺͸౰વobjectͰ͋Δ͔ΒɺstringͷػೳΛ࢖͏ ͜ͱΛ໨తͱ͍ͯ͠ͳ͍ͨΊ҆શͰ͋Δ ΑͬͯɺҾ਺ͷܕ͕ಛԽͨ͠σϦήʔτʹҾ਺ͷܕ͕൚Խͨ͠ σϦήʔτΛ௥Ճ͢Δ͜ͱ͸҆શͰ͋Δ    

       class  Test          {                  static  void  Main(string[]  args)                  {                        Action<object>  objAction  =  x  =>  {  Console.Write(x);  };                        Action<string>  strAction  =  objAction;                        strAction("str");                  }          }  
  12. "൓"มੑ ී௨ʹμ΢ϯΩϟετʹΑͬͯ҉໧ͷܕม׵͕ߦΘΕΔ ৔߹ͷࣜ͸[൚༻ܕʹಛԽܕ]Ͱ͋Δ ൓มੑΛ΋ͭσϦήʔτͷ৔߹͸[ಛԽܕʹ൚༻ܕ]Ͱ͋Δ ͋Εɺ”൓”ରʹͳͬͯΔ…        class  Test

             {                  static  void  Main(string[]  args)                  {                          //ී௨ͷμ΢ϯΩϟετ                          int  n  =  10;                          object  obj  =  n;                          //൓มੑΛ΋ͭσϦήʔτͷμ΢ϯΩϟετ                          Action<object>  objAction  =  x  =>  {  Console.Write(x);  };                          Action<string>  strAction  =  objAction;                  }          }
  13. ൓มੑͷྫ        class  Test        

     {                  delegate  void  OneParam<T>(T  x);                  class  A  {  }                  class  B  :  A  {  }                  static  void  Main(string[]  args)                  {                          //൓มੑΛ࣋ͨͳ͍(Τϥʔ͕ग़Δ)                          OneParam<A>  oneA  =  _1  =>  Console.WriteLine(_1);                          OneParam<B>  oneB  =  oneA;//Τϥʔʂܕ͕҉໧తʹม׵Ͱ͖ͳ͍                          //൓มੑΛ࣋ͭ(σϦήʔτΛinʹΑͬͯम০ͨ͠৔߹)                          Action<A>  actA  =  _2  =>  Console.WriteLine(_2);                          Action<B>  actB  =  actA;                          actB(new  B());//actB಺ͷactAͰ͸ɺҾ਺BΫϥεΛAΫϥεʹμ΢ϯΩϟετ                  }          }
  14. ࣮ࡍʹ࢖ͬͯΈΔ        class  Test        

     {                  //intܕύϥϝʔλΛҾ਺ʹऔΔ໭Γ஋voidͷσϦήʔτ                  delegate  void  IntParam(int  x);                  static  void  Show(int  i)                  {                          Console.WriteLine(i);                  }                  static  void  Main(string[]  args)                  {                          IntParam  showIntParam1  =  new  IntParam(Show);//ݹ͍ॻ͖ํ                          IntParam  showIntParam2  =  Show;//৽͍͠ॻ͖ํɺ্ͱಉ͡ҙຯ                          showIntParam1  +=  Show;//ෳ਺ͷϝιουΛ֨ೲͰ͖Δ                          showIntParam1  +=  showIntParam2;//ܕ͕ಉ͡ͳͷͰ͜Ε΋Մೳ                          showIntParam1(999);//ෳ਺ͷϝιου΁ͷࢀরΛ΋ͭσϦήʔτΛ࢖ͬͯΈΔ                  }          } ϝιου໊͸ ϝιου΁ͷࢀর Λද͢ͱߟ͑Δ
  15. class  MyValue   {          private  static

     Boolean  accessed;          private  Int32  sample;          public  Int32  Sample          {                  get                  {                          accessed  =  true;                          return  sample;                  }                  set                  {                          accessed  =  true;                          sample  =  value;                  }          }          public  MyValue(Int32  n)  {  sample  =  n;  }          public  static  void  Report()          {                  Console.WriteLine("ΞΫηε͞Ε"  +  (accessed  ?  "·ͨ͠"  :  "ͯ·ͤΜ"));          }   }   class  Test   {          static  void  Main(string[]  args)          {                  var  ar  =  new  MyValue[]                  {                          new  MyValue(1),                          new  MyValue(2),                          new  MyValue(3),                  };                  var  query  =  ar.Where(c  =>  c.Sample  !=  2);                  MyValue.Report();          }   } ΞΫηε͞ΕΔͱϑϥάཱ͕ͭ ͜͜Ͱɺ2Ҏ֎ͷ஋Λ࣋ͭΫΤϦ Λநग़͢ΔɻSampleΛ࢖͍ͬͯΔ ͷͰɺϑϥάཱ͕ͭ͸ͣ…?
  16.        class  ൓෮ࢠ          {

                     static  void  Main(string[]  args)                  {                          var  n  =  YieldTest(4);                          foreach(var  a  in  n)                                  Console.WriteLine(a);                              }                  static  IEnumerable<string>  YieldTest(int  n)                  {                          int  i  =  1;                          while(true)                          {                                  yield  return  (i.ToString()  +  "จࣈ໨");                                  ++i;                                  if(i  >  n)                                          yield  break;                          }                          yield  return  (i.ToString()  +  "จࣈ໨");                  }          } yield࢖༻ྫ yield break͸breakͱҧ͍ɺ ϝιουΛऴྃ͢Δ ͦΕʹΑͬͯɺwhileͷ֎ͷ yield return͸࣮ߦ͞Εͳ͍ yield returnͰཁૉΛฦ͍ͯ͠ ͖ɺϝιουऴྃ࣌ʹγʔέ ϯεΛฦ͢ ൓෮ࢠΠϯλϑΣʔεܕҎ֎ ͷ஋͸ฦͤͳ͍(Ϧετ΍഑ ྻͳͲΛ໭Γ஋ʹ͢Δࣄ͸ग़ དྷͳ͍)
  17. ग़དྷΔࣄͱग़དྷͳ͍ࣄ ϝιου಺Ͱ͸ɺbreak Λ༻͍Δࣄ͕ग़དྷΔ ͦΕʹΑͬͯɺwhile֎ͷ yield return΋࣮ߦ͞ΕΔ breakͱyield break͸ҧ͏ return͸࢖͑ͳ͍ Αͬͯɺ୅ΘΓʹyield

    breakΛ࢖͏ class  ൓෮ࢠ          {                  static  void  Main(string[]  args)                  {                          var  n  =  YieldTest(4);                          foreach(var  a  in  n)                                  Console.WriteLine(a);                  }                  static  IEnumerable<string>  YieldTest(int  n)                  {                          int  i  =  1;                          while(true)                          {                                  yield  return  (i.ToString()  +  "จࣈ໨");                                  ++i;                                  if(i  >  n)                                          break;//break͸࢖͑Δ                                          /*yield  break;*/                          }                          /*return  (i.ToString()  +  "จࣈྻ");           —>>ɹreturn͸࢖͑ͳ͍    */                            yield  return  (i.ToString()  +  "จࣈ໨");                  }          }
  18. ແݶϧʔϓʁʁ private  static  IEnumerable<int>  Get123()   {      

       while(true)          {                  foreach(var  i  in  Enumerable.Range(1,  3))                          yield  return  i;          }   }   static  void  Main(string[]  args)   {          foreach(var  item  in  Get123())          {                  Console.Write(item);                  if(Console.KeyAvailable)                          return;          }   }
  19. using  System.Runtime.InteropServices;   [StructLayout(LayoutKind.Auto)]   internal  struct  SomeValue   {

           private  readonly  Byte  m_byte;        private  readonly  Int16  m_int;   }
  20. using  System.Runtime.InteropServices;   [StructLayout(LayoutKind.Explicit)]   internal  struct  SomeValue   {

           [FieldOffset(0)]        private  readonly  Byte  m_byte;        [FieldOffset(0)]        private  readonly  Int16  m_int;   }
  21. Φϑηοτ͕ॏͳΔ৔߹ [StructLayout(LayoutKind.Explicit)]          public  struct  SomeValue  

           {                  [FieldOffset(0)]                  public  Byte  m_byte;                  [FieldOffset(0)]                  public  Int16  m_int;          }          class  Test          {                  static  void  Main(string[]  args)                  {                          SomeValue  some  =  new  SomeValue();                          some.m_int  =  Int16.MaxValue;                          Console.WriteLine(some.m_byte);                  }          } Φϑηοτ͕ॏͳ͍ͬͯΔͷͰ m_byte͸ૢ࡞ͯ͠ͳ͍͕ ࣮ߦ݁Ռ͸255ʹͳΔ
  22. ϦϑϨΫγϣϯͷίʔυ͕ //targetจࣈྻʹargจࣈྻؚ͕·ΕΔ͔Λ൑ఆ͢Δ   //ϦϑϨΫγϣϯΛ༻͍ͨϓϩάϥϜ   Object  target  =  "Target  string";

      Object  arg  =  "arg";   //ϝλσʔλͷܕ৘ใ͔ΒɺඞཁͳҾ਺ܕʹҰக͢Δϝιου৘ใΛநग़͢Δ   Type[]  argType  =  new  Type[]  {  arg.GetType()  };   _MethodInfo  method  =  target.GetType().GetMethod("Contains",  argType);   //ϝιου৘ใ͔ΒϝιουΛݺͼग़͢   Object[]  arguments  =  new  Object[]  {  arg  };   Boolean  result  =  Convert.ToBoolean(method.Invoke(target,  arguments));   Console.WriteLine(result);//݁Ռදࣔ
  23. ͜͜·Ͱ؆ܿʹͳΔ dynamic  target  =  "Target  string";   dynamic  arg  =

     "arg";   Boolean  result  =  target.Contains(arg);   Console.WriteLine(result); ϝλσʔλͷܕ৘ใͳͲΛಡΈࠐΉඞཁ͕͋Δ৔߹ dynamicΛ্ख͘࢖͏ࣄͰ͔ͳΓָʹϓϩάϥϜ͕ ॻ͚ΔΑ͏ʹͳΔʂʂ ಈతʹܕΛ൑ఆ͢Δͱ͍͏֓೦Λந৅ԽͰ͖Δ
  24. ThreadΫϥε ͜ͷํ๏͚͕ͩεϨουϓʔϧΛ࢖Θͳ͍ Thread t = new Thread(new ThreadStart(ॲཧ));ͱ͍͏ײ͡ͰεϨου Λ࡞Δ t.Start();ͰεϨου։࢝

    t.Join();ͰεϨουͷ׬ྃ·ͰݱࡏͷεϨουΛࢭΊΔ t.Abort();ͰॲཧΛଧͪ੾Δ(ThreadAbortExceptionΛൃੜͤ͞Δ) IsBackgroundͰϑΥΞ/όοΫάϥ΢ϯυΛมߋՄೳ IsBackgroundͷنఆ஋͸falseͰϑΥΞάϥ΢ϯυεϨου
  25. Answer -Thread- 1. UIεϨουͰ΋ϫʔΧʔεϨουͰ΋ࢦఆՄೳ 2. ड͚औΔखஈ͸ඪ४Ͱ༻ҙ͞Ε͍ͯͳ͍ɻThreadΛར༻͢ ΔΫϥεͷϑΟʔϧυͳͲΛར༻ͯ͠ڞ༗͢ΔͳͲ͔͠खஈ ͸ແ͍ 3. ඪ४Ͱ͸༻ҙ͞Ε͍ͯͳ͍ɻऴྃλΠϛϯάΛϙʔϦϯά/

    ΠϕϯτͳͲͰݕग़ͯࣗ͠෼ͰίʔϧόοΫϝιουΛݺͿ 4. ThreadͰ໭Γ஋Λαϙʔτ͍ͯ͠ͳ͍ͷͰແཧɻThreadΛ ར༻͢ΔΫϥεͷϑΟʔϧυͳͲΛར༻ͯ͠ڞ༗͢Δ
  26. Task Task t = new Task(ॲཧ); t.Start();͜ΕͰॲཧΛελʔτग़དྷΔ Task t =

    Task.Run(ॲཧ);্2ߦΛ·ͱΊΒΕΔ Task t = new Task.Factory.StartNew(ॲཧ,Φϓγϣϯ);ͰΦϓγϣϯΛࢦఆ͠ ͯλεΫΛ࡞੒࣮͠ߦͰ͖Δ t.IsCompletedͰॲཧ͕׬͔ྃͨ͠Ͳ͏͔ௐ΂ΒΕΔ(ϙʔϦϯάͰ࢖͑Δ) t.Wait();ͰλεΫͷॲཧऴྃΛ଴ػͰ͖Δ Task.WaitAll(Մม௕ͰλεΫΛࢦఆ);੩తϝιουͰࢦఆͨ͠λεΫશͯͷ ऴྃΛ଴ػͰ͖Δ
  27. Task ໭Γ஋Λαϙʔτ͍ͯ͠Δ TaskΫϥεͷδΣωϦοΫ൛ʹฦ͍ͨ͠Ҿ਺Λࢦఆͯ͠ TaskΛ࡞੒͠࢖͏ Task<int> t = new Task<int>(ॲཧ); t.Start();

    int result = t.Result; ResultϓϩύςΟΛ࢖༻ͨ࣌͠఺Ͱɺݺͼग़͠ଆͷεϨο υ͸݁Ռ͕ฦͬͯ͘Δ·Ͱ଴ػ͢Δ
  28. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class MainClass
 {
 public static void Main(string[] args)
 {
 Thread t = new Thread(new ThreadStart(Show));
 t.Start();
 Console.WriteLine("Main Method called.");
 t.Join();
 Console.WriteLine("exit...");
 }
 
 public static void Show()
 {
 Thread.Sleep(100);
 Console.WriteLine("Show Method called.");
 }
 }
 }

  29. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class MainClass
 {
 static int x = 100;
 
 public static void Main(string[] args)
 {
 //2ͭͷεϨουͰڞ௨ͷϑΟʔϧυ(ࢿݯ)Λར༻͢Δ
 Thread t1 = new Thread(new ThreadStart(ShowAndIncrement));
 t1.Start();
 Thread t2 = new Thread(new ThreadStart(Show));
 t2.Start();
 
 //ऴྃ଴ͪ
 t1.Join();
 t2.Join();
 Console.WriteLine("exit...");
 }
 
 public static void ShowAndIncrement()
 {
 Thread.Sleep(100);
 Console.WriteLine("ShowAndIncrement Method called. ref value = { 0}", x++);
 }
 
 public static void Show()
 {
 Console.WriteLine("Show Method called. ref value = { 0}", x);
 }
 }
 } ShowAndIncrement͸͕࣌ؒ ͔͔ΔॲཧͳͷͰɺ͜ΕͰ͸ ࢥ͏Α͏ͳॱ൪Ͱ࣮ߦ͞Εͳ͍ Thread͸໭Γ஋Λαϙʔτ͍ͯ͠ͳ͍ͷͰ ϑΟʔϧυΛ࢖ͬͯڞ༗͢Δ(volatileम০͕٢ɻ ࠷దԽΛ๷͛Δ) ThreadStart͸Ҿ਺΋ αϙʔτ͞Εͯͳ͍
  30. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class MainClass
 {
 static int x = 100;
 
 public static void Main(string[] args)
 {
 //2ͭͷεϨουͰڞ௨ͷϑΟʔϧυ(ࢿݯ)Λར༻͢Δ
 Thread t1 = new Thread(new ThreadStart(ShowAndIncrement));
 t1.Start();
 t1.Join();//ऴྃΛ଴ͭ
 Thread t2 = new Thread(new ThreadStart(Show));
 t2.Start();
 
 //ऴྃ଴ͪ
 t2.Join();
 Console.WriteLine("exit...");
 }
 
 public static void ShowAndIncrement()
 {
 Thread.Sleep(100);
 Console.WriteLine("ShowAndIncrement Method called. ref value = { 0}", x++);
 }
 
 public static void Show()
 {
 Console.WriteLine("Show Method called. ref value = { 0}", x);
 }
 }
 } ͜ΕͳΒ͏·͍͕͘͘ JoinͰॲཧΛ଴ͭ࣌ؒ ͕ඞཁʹͳΔ
  31. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class MainClass
 {
 //ϙʔϦϯά͢ΔͨΊͷ࢓ֻ͚
 static bool endFunc = false;
 
 public static void Main(string[] args)
 {
 int x = 100;
 //Ωϡʔʹ഑ஔग़དྷͳ͔ͬͨ৔߹ʹfalse͕ฦͬͯ͘Δ͕΄΅ແҙຯͳͷͰී௨͸औಘ͠ͳͯ͘΋͍͍
 //ԿނͳΒɺ഑ஔग़དྷͳ͔ͬͨ৔߹͸ྫ֎͕ૹग़͞ΕΔ͔Β
 bool qurResult = ThreadPool.QueueUserWorkItem(new WaitCallback(Show), x);
 //εϨουϓʔϧͷॲཧ͕ऴ͔ྃͨ͠Λ൑ఆ͢Δ࢓ֻ͚͸ඪ४Ͱ͸༻ҙ͞Ε͍ͯͳ͍
 //ඞཁͳΒϙʔϦϯά͢Δ࢓ֻ͚Λࣗ෼Ͱ༻ҙ͢Δ
 while (!endFunc)
 {
 //ॲཧ͕ऴΔ·ͰϙʔϦϯά
 }
 Console.WriteLine("exit...");
 }
 
 public static void Show(object x)
 {
 Console.WriteLine(x);
 Thread.Sleep(2000);//2ඵ͔͔Δॲཧ
 endFunc = true;
 }
 }
 } ීஈ͸QueueUserWorkItem ͷ໭Γ஋͸ࣺͯͯΑ͍ ϙʔϦϯάͷखஈ͕༻ҙ ͞Ε͍ͯͳ͍ͨΊࣗ෼Ͱ ࣮૷͢Δඞཁ͕͋Δ WaitCallbackσϦήʔτͷ γάωνϟʹैͬͨϝιου
  32. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class MainClass
 {
 public static void Main(string[] args)
 {
 Action<int> act;
 act = n => Console.WriteLine(n);
 act.BeginInvoke(10, null, null);
 Console.ReadKey();
 }
 }
 }

  33. using System;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Runtime.Remoting.Messaging;
 
 namespace

    ConsoleProject
 {
 class TestDelegateAsync
 {
 
 class MainClass
 {
 public static void Main(string[] args)
 {
 TestDelegateAsync test = new TestDelegateAsync();
 TestDelegate d = test.DoWork;
 d.BeginInvoke(test.CallbackMethod, null);
 Console.ReadKey();
 }
 
 }
 
 public delegate int TestDelegate();
 
 //࣮ߦ͍ͨ͠ॲཧ
 public int DoWork()
 {
 Console.WriteLine("DoWork");
 return 100;
 }
 
 //AsyncCallbackͷγάωνϟʹैͬͨίʔϧόοΫϝιου
 public void CallbackMethod(IAsyncResult ar)
 {
 //BeginInvokeͷ݁ՌΛ࢖ͬͯɺͦͷεϨου͔Β݁ՌΛநग़ͯ͠දࣔ
 TestDelegate @delegate = (TestDelegate)((AsyncResult)ar).AsyncDelegate;
 int result = @delegate.EndInvoke(ar);
 Console.WriteLine(result);
 }
 }
 }
 ࣮ߦ͍ͨ͠ॲཧ͕ೖΔσϦήʔτΛ༻ҙͯ͠ ࣮ߦ͍ͨ͠ॲཧΛॻ͘ γάωνϟʹैͬͨίʔϧόοΫϝιου ͜ͷΑ͏ʹͯ݁͠ՌΛಘΒΕΔ
  34. namespace ConsoleProject
 {
 class MainClass
 {
 public static void Main(string[]

    args)
 {
 Console.WriteLine("Hello World!");
 var a = new TestAsync();
 //10͔Β1·Ͱදࣔ͢Δ͕
 //ঢ়گʹԠͯ͡දࣔॱ͕มΘΔ
 for (int i = 10; i > 0; --i)
 a.Func(i);
 Console.ReadKey();
 }
 }
 
 class TestAsync
 {
 public void Func(int x)
 {
 Task.Run(() =>
 {
 Thread.Sleep(100 * x);
 Console.WriteLine(x++);
 });
 }
 }
 }
 جຊతͳ࢖͍ํ Ҿ਺Λදࣔͯ͠Ճࢉ͢Δ ॏ͍ͨॲཧ
  35. namespace ConsoleProject
 {
 class MainClass
 {
 public static void Main(string[]

    args)
 {
 Console.WriteLine("Hello World!");
 var a = new TestAsync();
 //10͔Β1·Ͱදࣔ͢Δ͕
 //ঢ়گʹԠͯ͡දࣔॱ͕มΘΔ
 Task[] tasks = new Task[10];
 for (int i = 10; i > 0; --i)
 tasks[i - 1] = a.Func(i);
 Task.WaitAll(tasks);
 Console.WriteLine("End All Tasks.");
 }
 }
 
 class TestAsync
 {
 public Task Func(int x)
 {
 return Task.Run(() =>
 {
 Thread.Sleep(100 * x);
 Console.WriteLine(x++);
 });
 }
 }
 } Runͷ໭Γ஋͸TaskܕͰ͋Δ (͖ͬ͞ͷϓϩάϥϜͰ͸ແࢹࣺͯͯͯͨ͠) શͯͷλεΫ(໭Γ஋Ͱಘͨ) ͕ऴྃ͢Δ·Ͱ଴ͭ
  36. namespace ConsoleProject
 {
 class MainClass
 {
 public static void Main(string[]

    args)
 {
 var a = new TestAsync();
 a.Func(100);
 }
 }
 
 class TestAsync
 {
 public void Func(int x)
 {
 var t = Task<int>.Run(() => x) .ContinueWith(a => Console.WriteLine(a.Result));
 t.Wait();
 }
 }
 } ໭Γ஋intͷॲཧΛͯ͠ɺͦͷ໭Γ஋Λ࢖༻ͨ͠ ίʔϧόοΫϝιουݺͼͩ͠ͷྫ ContinueWithϝιουͷҾ਺ʹೖ͖ͬͯͨ Runϝιουͷ໭Γ஋(Task<int>ܕ)ͷ ResultϓϩύςΟΛ࢖͑͹؆୯ʹ ίʔϧόοΫϝιουʹ஋ΛҾ͖౉ͤΔ
  37. using System;
 using System.Threading.Tasks;
 using System.Threading;
 
 class async_await
 {


    static void Main(string[] args)
 {
 var test = new AsyncTest();
 test.Test1();
 Console.ReadKey();
 }
 }
 
 class AsyncTest
 {
 //͕͔͔࣌ؒΔͨΊɺผεϨουͰ࣮ߦͯ͠΄͍͠ॲཧ
 //(ผεϨουͰߦͬͯ΋ଞʹѱӨڹΛ༩͑ͳ͍લఏ)
 public async void Test1()
 {
 await Task.Run(() =>
 {
 Thread.Sleep(2000);
 Console.WriteLine("Test1ॲཧA");
 });
 }
 } ͜ͷ··ͩͱॲཧऴྃલʹ Կ͔ΩʔΛԡ͢ͱڧ੍ऴྃ
  38. using System;
 using System.Threading.Tasks;
 using System.Threading;
 
 class async_await
 {


    static void Main(string[] args)
 {
 var test = new AsyncTest();
 test.Test1();
 Console.ReadKey();
 }
 }
 
 class AsyncTest
 {
 //εϨουΛੜ੒͠ɺܧଓλεΫΛߦΘͤΔ
 //ॲཧB΋ॲཧAͱಉ͡εϨουͰߦΘΕ͍ͯΔ͜ͱʹ஫ҙ
 public async void Test1()
 {
 await Task.Run(() =>
 {
 //࣌ؒͷ͔͔ΔॲཧΛͯ͠΋awaitʹΑͬͯॲཧB͸࣮ߦ͞Εͳ͍
 Thread.Sleep(2000);
 Console.WriteLine("Test1ॲཧA");
 });
 Console.WriteLine("Test1ॲཧB");//ܧଓॲཧ
 }
 }
  39. using System;
 using System.Threading.Tasks;
 using System.Threading;
 
 
 class async_await


    {
 static void Main(string[] args)
 {
 var test = new AsyncTest();
 //√3Λදࣔ͢Δɻ
 //ResultϓϩύςΟʹΑΓॲཧऴྃ࣌·ͰϝΠϯεϨου΋ऴྃ͠ͳ͍
 Console.WriteLine(test.SumTwoAndSqrt(1.0, 2.0).Result);
 }
 }
 
 class AsyncTest
 {
 //2ͭͷҾ਺Λ଍ͯ͠ฏํࠜΛऔΔϝιουɻ
 //Sqrt͕return͢Δͷ͸doubleܕ͔ͩɺasyncम০ʹΑΓTask<double>ܕʹม׵͞ΕΔ
 public async Task<double> SumTwoAndSqrt(double num1, double num2)
 {
 //ຊདྷͳΒRun͸Task<double>Λฦ͕͢
 //awaitम০ʹΑΓ݁Ռͷdoubleܕม਺ͷΈ͕நग़͞Εͨ
 double result = await Task.Run(() => num1 + num2);
 return Math.Sqrt(result);//લͷॲཧ݁ՌresultΛ༰қʹ࢖͑Δ
 }
 }

  40. using  System;   using  System.Collections.Generic;   using  System.Linq;   using

     System.Text;   using  System.Threading;   using  System.Threading.Tasks;   internal  class  async_await   {      private  static  void  Main(string[]  args)      {          Task.Run(async  ()  =>          {              ////////////////////              //͜͜ʹԿΒ͔ͷॲཧ//              ////////////////////                await  Task.Run(()  =>  Thread.Sleep(1000));              Console.WriteLine("ඇಉظϥϜμࣜͷه๏");          });          Console.ReadKey();      }   }   ৽͍͠Task͔ΒܧଓλεΫΛݺͼग़͢ ͜ͱͰɺawait·ͰͷԿΒ͔ͷॲཧ͕ݺ ͼग़͠ݩͱಉ͡εϨου͔Βݺͼग़͞ ΕΔ͜ͱΛ๷͙͜ͱ͕Ͱ͖Δɻ ϥϜμࣜΛܧଓλεΫʹ͢Δ
  41. using System;
 using System.Threading.Tasks;
 using System.Threading;
 
 
 class MainClass


    {
 public static void Main(string[] args)
 {
 var t1 = Task.Run(() =>
 {
 Console.WriteLine(ReadTargetLocked());
 });
 var t2 = Task.Run(() =>
 {
 IncrementLocked();
 });
 Task.WaitAll(t1, t2);
 }
 
 static int target = 1110;
 static object lockObj = new object();
 
 static int ReadTargetLocked()
 {
 lock (lockObj)
 {
 Thread.Sleep(1000);
 return target;
 }
 }
 
 static void IncrementLocked()
 {
 lock (lockObj)
 {
 ++target;
 }
 }
 } ΦϒδΣΫτ͕ϩοΫ͞Ε͍ͯΔͷͰ ଞͷεϨου͕ͦͷΦϒδΣΫτΛ ࢀর͠Α͏ͱ͢Δͱ ΦϒδΣΫτ͕ղ์͞ΕΔ·Ͱ଴ػ (ϒϩοΫ) ͞ΕΔ ௨ৗ͸lock༻ʹΦϒδΣΫτ Λ1ͭ༻ҙ͓ͯ͘͠ ڞ༗͍ͨ͠ΦϒδΣΫτࣗ਎Ͱ΋͍͍͕ ϩοΫม਺Λpublicͱͯ͠ѻ͍͍ͨ৔߹͸ σουϩοΫͷݪҼʹͳΓ͔Ͷͳ͍ ϩοΫ༻ม਺Λ༻ҙ͢Ε͹publicͰ΋ແ໰୊
  42. TPL

  43. using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;


    using System.Threading;
 
 class TPL
 {
 static void Main(string[] args)
 {
 var act = new Action[10];
 for (int i = 0; i < 10; ++i)
 act[i] = new Action(Show);
 //Invoke͸શͯ׬ྃ͢Δ·ͰϝΠϯεϨου͕ऴྃ͠ͳ͍ 
 Parallel.Invoke(act);
 Console.WriteLine("exit...");
 }
 
 static void Show()
 {
 Console.WriteLine("Hello.");
 }
 }
  44. using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;


    using System.Threading;
 
 class TPL
 {
 static void Main(string[] args)
 {
 //For͸શͯ׬ྃ͢Δ·ͰϝΠϯεϨου͕ऴྃ͠ͳ͍
 Parallel.For(0, 10, n =>
 {
 Thread.Sleep(100);
 Console.WriteLine(n);
 });
 
 Console.WriteLine("exit...");
 }
 }
  45. using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;


    using System.Threading;
 
 class TPL
 {
 static void Main(string[] args)
 {
 //ForAll͸શ࣮ͯߦ͞ΕΔ·ͰϝΠϯεϨου͕ऴྃ͠ͳ͍
 Enumerable.Range(0, 10).AsParallel().ForAll(n =>
 {
 Thread.Sleep(100);
 Console.WriteLine(n);
 });
 
 Console.WriteLine("exit...");
 }
 }