SlideShare a Scribd company logo
1 of 61
Download to read offline
Let’s Enjoy C#!

       まさる@わんくま同盟
http://blogs.wankuma.com/masaru/




   わんくま同盟 http://www.wankuma.com/
自己紹介

•   ハンドル まさる
•   性別   見ての通り♂
         SE兼プログラマ(C#がメイン)
•   職業
•   趣味
    – 楽器演奏   バスクラリネット
    – 読書
     • 小説
     • 技術書
     • ビジネス書


         わんくま同盟 http://www.wankuma.com/
詳しくは…




まさるblogでググってくださいませ
        <(_ _)>




   わんくま同盟 http://www.wankuma.com/
Agenda

• C#ってどんなの?
• C#の歩み
• C#のすごいところ




      わんくま同盟 http://www.wankuma.com/
C#ってどんなの?




わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• Microsoftが.NET構想用に開発
 – 開発の中心はDelphiの祖”アンダース・ヘル
   スバーグ”
• CLSに準拠した.NET Framework用の言語
 – ECMA、JISによって言語仕様は標準化されてい
   る
• C/C++、Java、VB、Pascalなど、さまざま
  な言語の仕様を取り込んでいる


        わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#の文法
 – いわゆる”中括弧言語”
   • C、Javaに似ている
   • Javaな人は取っ組みやすい


   ・・・けど、違う部分もあるので注意




          わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• Javaとの文法の違い
 – 文字列の比較
  • JavaではString.equalsメソッドを用いる
    String hoge = “fuga”;
    if ( “target”.equals(hoge) ) {
        System.out.println(“Hit!”);
    }


  • C#では、string型は==で比較する
     string hoge = “fuga”;
    if ( hoge == “target” )
    {
        Console.WriteLine(“Hit!”);
    }


           わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• Javaとの文法の違い
 – forとforeach
   String[] strArray = new String[] {
      “hoge”, “foo”, “bar” };

   for ( String item : strArray ) {
     System.out.println(item);
   }

   string[] strArray = new string[] {
      “hoge”, “foo”, “bar” };

   foreach ( string item in strArray )
   {
     Console.WriteLine(item);
   }

               わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• Javaとの文法の違い
 – switchで使用できる型
       • Javaは整数型か列挙型
       • C#は文字列も可能
 int hoge;                string hoge;
 switch ( hoge ) {        switch ( hoge )
   case 1 :               {
    break;                  case “a” :
                             break;
     case 2 :
      break;                  case “b” :
 }                             break;
                          }



                わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• Javaとの文法の違い
 – メソッドのオーバーライド
     • Javaは既定でオーバーライド可能
     • C#は既定でオーバーライド不可
 class Parent {                 class Parent {
   public void hoge() {           public virtual void Hoge() {
   }                              }
 }                              }

 class Child extends Parent {   class Child : Parent {
   public void hoge() {           public override void hoge() {
   }                              }
 }                              }



                わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#の型
 – 値型
   • 値自体を格納する型
   • ValueType構造体を派生した型
   • int、datetimeなど
 – 参照型
   • 値への”参照”を格納する型
   • Objectクラスを派生した型
   • string、配列など



         わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#の型
   – 値型
               1 int a;
               2 int b;
               3 a = 1;

       1                  2             3

           a                  a             a
                                        1
 101               101            101

                                            b
                              b
 102               102            102
 103               103            103
 104               104            104
 105               105            105




           わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#の型
   – 参照型
               1 string a;
               2 string b;
               3 a = “hoge”;

       1                   2                 3

           a                   a                       a
                                         address:104
 101               101             101

                                                       b
                               b
 102               102             102
 103               103             103

                                             h
 104               104             104

                                             o
 105               105             105

                                             :


           わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – プロパティ
  • クラスのフィールドへのアクセサ
    – Javaではgetter、setterメソッドで実現
     public class MyClass
     {
       private string name;
       public string Name
       {
         get { return this.name; }
         set { this.name = value; }
       }
     }



         わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – プロパティ
      • setのみ、getのみでwrite only、read only
 write only                       read only
 public class MyClass             public class MyClass
 {                                {
   private string name;             private string name;
   public string Name               public string Name
   {                                {
     set { this.name = value; }       get { return this.name; }
   }                                }
 }                                }




                 わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – プロパティ
  • get、setそれぞれにアクセス修飾子指定可能
   getのみ公開
   public class MyClass
   {
     private string name;
     public string Name
     {
       get { return this.name; }
       private set { this.name = value; }
     }
   }



           わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – delegate(デリゲート):移譲
  • Cで言う関数ポインタ
  • メソッドへの”参照”を保持する型
  • 用途
    – クラスでなくメソッド単位で、ロジックを切り替えるた
      め(Strategyパターン)
    – 後述するイベント(Observerパターン)
    – etc...




       わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – delegate(デリゲート):移譲
delegate void MyDelegate(string s);   static void Main(string[] args)
                                      {
static void Method1(string s)          MyDelegate myDelegate;
{
  // ~                                    if (IsA)
}                                         {
                                            myDelegate = Method1;
static void Method2(string value)         }
{                                         else
  // ~                                    {
}                                           myDelegate = Method2;
                                          }
                                          myDelegate(quot;hogequot;);
                                      }

                  わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – event(イベント)
   • オブジェクトの内部の状態が変更を外部に通知す
     る仕組み
     – いわゆるObserverパターン
     – 前述のデリゲートを使って、ある状態になったとき呼び
       出されるメソッドを登録する




        わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – event(イベント)
  public Form1()
  {
    InitializeComponent();

   this.button1.Click += Method1;
   this.button1.Click += Method2;
  }
  private void Method1(object sender, EventArgs e)
  {
  }
  private void Method1(object sender, EventArgs e)
  {
  }


               わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – Attribute(属性)
   • 型、メンバにメタデータを付加する
      – 例えばシリアライズ可能なクラス
         » JavaはSerializableインターフェイス実装
         » C#はSerializable属性を付加

     [Serializable]
     public class MySerializableClass
     {
       public Hoge = “”;
     }




             わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – Attribute(属性)
   • 他には・・・
      – デザイナサポート
      – NUnitのテストクラス、メソッド
      – etc...


   • メタデータなので、適用範囲は無限大
      – 設定した属性はリフレクションで取得可能




          わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – ポインタ
  • C、C++などと同等のもの
  • ただし、利用可能となる条件は厳しい
    – コンパイルオプション「/unsafe」の指定
    – unsafeブロック、もしくはunsafeキーワードがつけられ
      たブロック内




       わんくま同盟 http://www.wankuma.com/
C#ってどんなの?

• C#独特の仕様
 – ポインタ
    public void MyMethod()
     {
       unsafe
       {
         int* hoge = null;
         int a = 1;
         hoge = &a;
       }
     }




           わんくま同盟 http://www.wankuma.com/
C#の歩み




わんくま同盟 http://www.wankuma.com/
C#の歩み

• 2002年 C# 1.0
  – 記念すべき最初のバージョン
  – これまで説明したような機能が盛り込まれた




         わんくま同盟 http://www.wankuma.com/
C#の歩み

• 2003年 C# 1.2
  – .NET Framework 1.1 に合わせてバージョンア
    ップ
  – 変更箇所
    • バグフィックスが主




         わんくま同盟 http://www.wankuma.com/
C#の歩み

• 2005年 C# 2.0
  – .NET Framework 2.0 に合わせてバージョンア
    ップ
    • 様々な言語仕様が追加された
      – C#は2.0からといっても過言ではない
  – 変更箇所
    • ジェネリクス
    • 匿名メソッド
    • partialクラス
    • staticクラス
    • null許容型
           わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – ジェネリクス
   • クラスの内部で使用する型をパラメータで指定
   • あらゆる型を用いた共通処理を記述可能
   • おもな適用先
     – List等のコレクション




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
     – ジェネリクス
 非ジェネリック                                 ジェネリック
 public void Main()                      public void Main()
 {                                       {
   ArrayList list =                        List<string> list =
     new ArrayList();                        new List<string>();
   list.Add(“hoge”);                       list.Add(“hoge”);
   list.Add(“foo”);                        list.Add(“foo”);
   list.Add(“bar”);                        list.Add(“bar”);

     // キャストが必要                              // キャストが不要
     string item = (string)list[1];          string item = list[1];
 }                                       }



                      わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – 匿名メソッド
   • メソッドを定義せず、直接デリゲートに処理を格
     納できる
   • 匿名メソッドの内部では、外のスコープのローカ
     ル変数も使える



    つまり、クロージャ(Closure)


        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
       • 匿名メソッド
 コード                                         実行結果
 delegate MyDelegate(string s);              hoge
 public void Main()                          hoge
 {                                           hoge
   int num = 5;                              hoge
   MyDelegate mydlg = delegate(string s) {   hoge
     for ( int i = 0; i < num; i++ )
     {
       Console.WriteLine(s);
     }
   };
   mydlg(“hoge”);
 }


                  わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – partialクラス(部分クラス)
   • 一つのクラスの定義を複数の箇所で記述できる
   • 用途
     – デザイナ生成部分とビジネスロジックを分けて記述
     – 対象オブジェクトごとにコードを分けて記述
     – etc...




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
     – partialクラス
 Hoge.Designer.cs                      Hoge.cs
 public class Hoge : Form              public partial class Hoge
 {                                     {
   private TextBox nameTextBox =         private nameTextBox_Click
    new TextBox();                         (object sender, EventArgs e)
                                         {
     this.Controls.Add(nameTextBox);       MessageBox.Show(
                                            nameTextBox.Text);
     this.nameTextBox.Click +=           }
      nameTextBox_Click;               }
 }




                    わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – staticクラス(静的クラス)
   • インスタンス化不可のクラス
   • staticなメンバのみ持てる
   • 利用方法
     – 算術計算など、インスタンス化不要なメソッド群を定義
       する、など




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – staticクラス

    public static MyStaticClass
    {
      public static int Count;

        public static void MyStaticMethod()
        {
        }
    }




              わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – null許容型(Nullableクラス)
   • null代入が可能な値型
     – 通常の値型はnull代入不可




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 2.0 の新機能
 – null許容型
 public void Main()
 {
   int? a = null;

     int b = a *2 ?? 0; // ??:左項がnullの場合、右項を適用

     Nullable<decimal> c = null;     // これでもよい

 }




                   わんくま同盟 http://www.wankuma.com/
C#の歩み

• 2008年 C# 3.0
  – .NET Framework 3.5 に合わせてバージョンア
    ップ
    • 数々の生産性が上がるような仕様が追加された
  – 変更箇所
    • 型推論
    • ラムダ式
    • 匿名型
    • オブジェクト初期化子、コレクション初期化子
    • 自動プロパティ
    • LINQ
         わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – 型推論
   • 型を指定せずに変数が書ける
   • ただし制限事項がある
     – ローカル変数のみ
     – 同時に変数の初期化を行う必要あり
     – 初期化する際、型が一意に定まる




         わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
     – 型推論
 public void Main()
 {
   var s = “hoge”;         // string型
   var a = 100;            // int型
   var f = 1.1;            // double型

     s = 100; // コンパイルエラー
              // すでに型が定まった変数に別の型の値は入れられない

     var dic = new Dictionary<string, List<decimal>>();
             // こういう長い名前の型を左辺に指定しなくてもよくなる
 }



                      わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – ラムダ式
   • 匿名メソッドのsyntax sugar
   • デリゲートの記述方法の一つ
     – ラムダ式という概念についてはWikipediaあたりを参照し
       てください(^^;



  ラムダ式を使うとクロージャが簡単に書
          ける!


         わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
     – ラムダ式                                 ※Rubyでの同等の記述
 public void Main()                         coll = [
 {                                            “hoge”
   var list = new List<string>();            ,”foo”
   list.Add(“hoge”);                         ,”bar” ]
   list.Add(“foo”);
   list.Add(“bar”);                         coll.each { |s|
                                              puts “名前:” + s
     list.ForEach(                          }
       s => Console.WriteLine(“名前:” + s)
     );
 }




                    わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – 匿名型
   • スコープ内でのみ使用可能な型を定義
   • 型推論を使用した場合のみ使える




         わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
     – 匿名型
 public void Main()
 {
   var taro = new { Name = “太郎”, Age = 27, Sex = “男” };

     Console.WriteLine(“私の名前は{0}です。”
       + “年は{1}です。”
       + “性別は見ての通り{2}です。”
       ,taro.Name
       ,taro.Age
       ,taro.Sex
     );
 }



                 わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – 自動プロパティ
   • privateフィールドを自動的に用意してくれる
   • get,setそれぞれアクセス指定可能




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – 自動プロパティ
      public class Employee
      {
        public string Name { get; set; }
        public string Organization { get; set; }
      }




           わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – オブジェクト初期化子
   • オブジェクトのプロパティを簡単に初期化できる
     構文


 – コレクション初期化子
   • コレクションの要素を簡単に初期化できる構文




        わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
  – オブジェクト初期化子、コレクション初期化子
 public void Main()
 {
   var empList = new List<Employee> {
     new Employee { Name = “太郎”, Organization = “ほげCorp.” }
     ,new Employee { Name = “次郎”, Organization = “ふが商店” }
     ,new Employee { Name = “花子”, Organization = “ぱよストア” }
   };
 }




               わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
 – LINQ
   • 様々なオブジェクトをターゲットに、クエリ式で
     アクセスできる
      – Object
      – XML
      – SQL


     これまで紹介した新機能は、
      すべてLINQのためのもの

           わんくま同盟 http://www.wankuma.com/
C#の歩み

• C# 3.0 の新機能
     – LINQ
 public void Main()
 {
   var emps = new List<Employee> {
     new Employee { Name = “太郎”, Organization = “ほげCorp.” }
     ,new Employee { Name = “次郎”, Organization = “ふが商店” }
     ,new Employee { Name = “花子”, Organization = “ぱよストア” }
   };

     var query = from emp in emps
      where emp.Name.EndWith(“郎”)
      select new { EmpName = emp.Name, EmpOrg = emp.Organization };

     query.ForEach(emp => Console.WriteLine(emp.EmpName));
 }

                   わんくま同盟 http://www.wankuma.com/
C#の歩み

• 2009年? C# 4.0
  – Visual Studio 2010の発表に合わせてリリース
    予定
  – 追加される機能の予定
    • 動的型付変数
      – 動的言語のように書ける?
    • 並列処理のサポート
      – マルチスレッドプログラミングを簡単に



               詳細は割愛!

         わんくま同盟 http://www.wankuma.com/
C#のすごいところ




わんくま同盟 http://www.wankuma.com/
C#のすごいところ

• 思考→プログラムに落とし込みやすい
 – 型推論、ラムダ式、LINQなどを使うと、ロジ
   ック以外の雑多なことから解放される
• なんといってもデリゲート
 – プログラムをクラスという縛りから解放して
   くれる
 – ラムダ式を使えば簡単に書ける




      わんくま同盟 http://www.wankuma.com/
C#のすごいところ

• 実はWindows APIとの親和性が高い
 – いざとなれば、APIを直にたたくことも可能
   • P/Invokeね
 – さらにポインタも使える
 – COMとの相互運用もサポート
   • ちょっと注意が必要だけど




          わんくま同盟 http://www.wankuma.com/
まとめ




わんくま同盟 http://www.wankuma.com/
まとめ

• C#はWindowsの現実を踏まえたごった煮言
  語(©猪俣健太郎さん)
 – 低レベルから高レベルまで幅広くカバー
• 機能は豊富だが使いやすく設計されている
 – 怖くないよ!
• 特にC# 3.0で追加された仕様群は生産性を
  数倍アップさせてくれる
 – 可能性を秘めている・・・


      わんくま同盟 http://www.wankuma.com/
まとめ




しっかり使いこなして
 定時で帰りましょう
    v(^ ^)v



 わんくま同盟 http://www.wankuma.com/
おしまい!
ご静聴ありがとうございました
     <(_ _)>




わんくま同盟 http://www.wankuma.com/
参考資料

• C#の現在・過去・未来
 (わんくま同盟勉強会 東京#23 - えムナウさん)
 http://www.wankuma.com/seminar/20080809tokyo23/Default.aspx

• 解題:私がJavaからC#に乗り換えた10の理由
 (わんくま勉強会東京 #26 LT – 猪俣健太郎さん)
 http://d.hatena.ne.jp/matarillo/20081116/p1

• Visual C# - MSDN Library
 http://msdn.microsoft.com/ja-jp/library/kx37x362(VS.80).aspx

• C# - Wikipedia
 http://ja.wikipedia.org/wiki/C_Sharp




                 わんくま同盟 http://www.wankuma.com/

More Related Content

What's hot

JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)smzk
 
C++编程实践
C++编程实践C++编程实践
C++编程实践Bin Cai
 
第5章 網際網路 (Update)
第5章 網際網路 (Update)第5章 網際網路 (Update)
第5章 網際網路 (Update)Seng Chi Ao
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanoharaHiroshi Ono
 
Java面试题解惑系列
Java面试题解惑系列Java面试题解惑系列
Java面试题解惑系列Guang Ying Yuan
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And FutureUehara Junji
 
226 Ch
226 Ch226 Ch
226 Chanjaan
 
技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用terada
 
悟透Javascript
悟透Javascript悟透Javascript
悟透JavascriptDoCode org
 
プログラマのためのテスト2
プログラマのためのテスト2プログラマのためのテスト2
プログラマのためのテスト2Kuniaki Igarashi
 
第4章 作業系統 (Update)
第4章 作業系統 (Update)第4章 作業系統 (Update)
第4章 作業系統 (Update)Seng Chi Ao
 
はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177ssuser74dafc
 
藏漢對照菩提道次第廣論12(S5392 L)
藏漢對照菩提道次第廣論12(S5392 L)藏漢對照菩提道次第廣論12(S5392 L)
藏漢對照菩提道次第廣論12(S5392 L)pedmavajra
 
藏漢對照菩提道次第廣論8(S5392L)
藏漢對照菩提道次第廣論8(S5392L)藏漢對照菩提道次第廣論8(S5392L)
藏漢對照菩提道次第廣論8(S5392L)pedmavajra
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4Komoriya Kazunari
 
藏漢對照菩提道次第廣論42(S5392 L)
藏漢對照菩提道次第廣論42(S5392 L)藏漢對照菩提道次第廣論42(S5392 L)
藏漢對照菩提道次第廣論42(S5392 L)pedmavajra
 
藏漢對照菩提道次第廣論14(S5392 L)
藏漢對照菩提道次第廣論14(S5392 L)藏漢對照菩提道次第廣論14(S5392 L)
藏漢對照菩提道次第廣論14(S5392 L)pedmavajra
 

What's hot (20)

JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)
 
C++编程实践
C++编程实践C++编程实践
C++编程实践
 
第5章 網際網路 (Update)
第5章 網際網路 (Update)第5章 網際網路 (Update)
第5章 網際網路 (Update)
 
Scala Study Session
Scala Study SessionScala Study Session
Scala Study Session
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanohara
 
Java面试题解惑系列
Java面试题解惑系列Java面试题解惑系列
Java面试题解惑系列
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
 
226 Ch
226 Ch226 Ch
226 Ch
 
技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用
 
悟透Javascript
悟透Javascript悟透Javascript
悟透Javascript
 
Intro. to JavaScript
Intro. to JavaScriptIntro. to JavaScript
Intro. to JavaScript
 
jQuery Tutorial
jQuery TutorialjQuery Tutorial
jQuery Tutorial
 
プログラマのためのテスト2
プログラマのためのテスト2プログラマのためのテスト2
プログラマのためのテスト2
 
第4章 作業系統 (Update)
第4章 作業系統 (Update)第4章 作業系統 (Update)
第4章 作業系統 (Update)
 
はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177
 
藏漢對照菩提道次第廣論12(S5392 L)
藏漢對照菩提道次第廣論12(S5392 L)藏漢對照菩提道次第廣論12(S5392 L)
藏漢對照菩提道次第廣論12(S5392 L)
 
藏漢對照菩提道次第廣論8(S5392L)
藏漢對照菩提道次第廣論8(S5392L)藏漢對照菩提道次第廣論8(S5392L)
藏漢對照菩提道次第廣論8(S5392L)
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
 
藏漢對照菩提道次第廣論42(S5392 L)
藏漢對照菩提道次第廣論42(S5392 L)藏漢對照菩提道次第廣論42(S5392 L)
藏漢對照菩提道次第廣論42(S5392 L)
 
藏漢對照菩提道次第廣論14(S5392 L)
藏漢對照菩提道次第廣論14(S5392 L)藏漢對照菩提道次第廣論14(S5392 L)
藏漢對照菩提道次第廣論14(S5392 L)
 

More from 将 高野

新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57将 高野
 
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55将 高野
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet将 高野
 
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51将 高野
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet将 高野
 
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40将 高野
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -将 高野
 
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35将 高野
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#将 高野
 
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)将 高野
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法将 高野
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World将 高野
 

More from 将 高野 (15)

新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
 
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
 
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#
 
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
 
git-svn
git-svngit-svn
git-svn
 
GTD on RTM
GTD on RTMGTD on RTM
GTD on RTM
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World
 

Lets Enjoy C#!

  • 1. Let’s Enjoy C#! まさる@わんくま同盟 http://blogs.wankuma.com/masaru/ わんくま同盟 http://www.wankuma.com/
  • 2. 自己紹介 • ハンドル まさる • 性別 見ての通り♂ SE兼プログラマ(C#がメイン) • 職業 • 趣味 – 楽器演奏 バスクラリネット – 読書 • 小説 • 技術書 • ビジネス書 わんくま同盟 http://www.wankuma.com/
  • 3. 詳しくは… まさるblogでググってくださいませ <(_ _)> わんくま同盟 http://www.wankuma.com/
  • 4. Agenda • C#ってどんなの? • C#の歩み • C#のすごいところ わんくま同盟 http://www.wankuma.com/
  • 6. C#ってどんなの? • Microsoftが.NET構想用に開発 – 開発の中心はDelphiの祖”アンダース・ヘル スバーグ” • CLSに準拠した.NET Framework用の言語 – ECMA、JISによって言語仕様は標準化されてい る • C/C++、Java、VB、Pascalなど、さまざま な言語の仕様を取り込んでいる わんくま同盟 http://www.wankuma.com/
  • 7. C#ってどんなの? • C#の文法 – いわゆる”中括弧言語” • C、Javaに似ている • Javaな人は取っ組みやすい ・・・けど、違う部分もあるので注意 わんくま同盟 http://www.wankuma.com/
  • 8. C#ってどんなの? • Javaとの文法の違い – 文字列の比較 • JavaではString.equalsメソッドを用いる String hoge = “fuga”; if ( “target”.equals(hoge) ) { System.out.println(“Hit!”); } • C#では、string型は==で比較する string hoge = “fuga”; if ( hoge == “target” ) { Console.WriteLine(“Hit!”); } わんくま同盟 http://www.wankuma.com/
  • 9. C#ってどんなの? • Javaとの文法の違い – forとforeach String[] strArray = new String[] { “hoge”, “foo”, “bar” }; for ( String item : strArray ) { System.out.println(item); } string[] strArray = new string[] { “hoge”, “foo”, “bar” }; foreach ( string item in strArray ) { Console.WriteLine(item); } わんくま同盟 http://www.wankuma.com/
  • 10. C#ってどんなの? • Javaとの文法の違い – switchで使用できる型 • Javaは整数型か列挙型 • C#は文字列も可能 int hoge; string hoge; switch ( hoge ) { switch ( hoge ) case 1 : { break; case “a” : break; case 2 : break; case “b” : } break; } わんくま同盟 http://www.wankuma.com/
  • 11. C#ってどんなの? • Javaとの文法の違い – メソッドのオーバーライド • Javaは既定でオーバーライド可能 • C#は既定でオーバーライド不可 class Parent { class Parent { public void hoge() { public virtual void Hoge() { } } } } class Child extends Parent { class Child : Parent { public void hoge() { public override void hoge() { } } } } わんくま同盟 http://www.wankuma.com/
  • 12. C#ってどんなの? • C#の型 – 値型 • 値自体を格納する型 • ValueType構造体を派生した型 • int、datetimeなど – 参照型 • 値への”参照”を格納する型 • Objectクラスを派生した型 • string、配列など わんくま同盟 http://www.wankuma.com/
  • 13. C#ってどんなの? • C#の型 – 値型 1 int a; 2 int b; 3 a = 1; 1 2 3 a a a 1 101 101 101 b b 102 102 102 103 103 103 104 104 104 105 105 105 わんくま同盟 http://www.wankuma.com/
  • 14. C#ってどんなの? • C#の型 – 参照型 1 string a; 2 string b; 3 a = “hoge”; 1 2 3 a a a address:104 101 101 101 b b 102 102 102 103 103 103 h 104 104 104 o 105 105 105 : わんくま同盟 http://www.wankuma.com/
  • 15. C#ってどんなの? • C#独特の仕様 – プロパティ • クラスのフィールドへのアクセサ – Javaではgetter、setterメソッドで実現 public class MyClass { private string name; public string Name { get { return this.name; } set { this.name = value; } } } わんくま同盟 http://www.wankuma.com/
  • 16. C#ってどんなの? • C#独特の仕様 – プロパティ • setのみ、getのみでwrite only、read only write only read only public class MyClass public class MyClass { { private string name; private string name; public string Name public string Name { { set { this.name = value; } get { return this.name; } } } } } わんくま同盟 http://www.wankuma.com/
  • 17. C#ってどんなの? • C#独特の仕様 – プロパティ • get、setそれぞれにアクセス修飾子指定可能 getのみ公開 public class MyClass { private string name; public string Name { get { return this.name; } private set { this.name = value; } } } わんくま同盟 http://www.wankuma.com/
  • 18. C#ってどんなの? • C#独特の仕様 – delegate(デリゲート):移譲 • Cで言う関数ポインタ • メソッドへの”参照”を保持する型 • 用途 – クラスでなくメソッド単位で、ロジックを切り替えるた め(Strategyパターン) – 後述するイベント(Observerパターン) – etc... わんくま同盟 http://www.wankuma.com/
  • 19. C#ってどんなの? • C#独特の仕様 – delegate(デリゲート):移譲 delegate void MyDelegate(string s); static void Main(string[] args) { static void Method1(string s) MyDelegate myDelegate; { // ~ if (IsA) } { myDelegate = Method1; static void Method2(string value) } { else // ~ { } myDelegate = Method2; } myDelegate(quot;hogequot;); } わんくま同盟 http://www.wankuma.com/
  • 20. C#ってどんなの? • C#独特の仕様 – event(イベント) • オブジェクトの内部の状態が変更を外部に通知す る仕組み – いわゆるObserverパターン – 前述のデリゲートを使って、ある状態になったとき呼び 出されるメソッドを登録する わんくま同盟 http://www.wankuma.com/
  • 21. C#ってどんなの? • C#独特の仕様 – event(イベント) public Form1() { InitializeComponent(); this.button1.Click += Method1; this.button1.Click += Method2; } private void Method1(object sender, EventArgs e) { } private void Method1(object sender, EventArgs e) { } わんくま同盟 http://www.wankuma.com/
  • 22. C#ってどんなの? • C#独特の仕様 – Attribute(属性) • 型、メンバにメタデータを付加する – 例えばシリアライズ可能なクラス » JavaはSerializableインターフェイス実装 » C#はSerializable属性を付加 [Serializable] public class MySerializableClass { public Hoge = “”; } わんくま同盟 http://www.wankuma.com/
  • 23. C#ってどんなの? • C#独特の仕様 – Attribute(属性) • 他には・・・ – デザイナサポート – NUnitのテストクラス、メソッド – etc... • メタデータなので、適用範囲は無限大 – 設定した属性はリフレクションで取得可能 わんくま同盟 http://www.wankuma.com/
  • 24. C#ってどんなの? • C#独特の仕様 – ポインタ • C、C++などと同等のもの • ただし、利用可能となる条件は厳しい – コンパイルオプション「/unsafe」の指定 – unsafeブロック、もしくはunsafeキーワードがつけられ たブロック内 わんくま同盟 http://www.wankuma.com/
  • 25. C#ってどんなの? • C#独特の仕様 – ポインタ public void MyMethod() { unsafe { int* hoge = null; int a = 1; hoge = &a; } } わんくま同盟 http://www.wankuma.com/
  • 27. C#の歩み • 2002年 C# 1.0 – 記念すべき最初のバージョン – これまで説明したような機能が盛り込まれた わんくま同盟 http://www.wankuma.com/
  • 28. C#の歩み • 2003年 C# 1.2 – .NET Framework 1.1 に合わせてバージョンア ップ – 変更箇所 • バグフィックスが主 わんくま同盟 http://www.wankuma.com/
  • 29. C#の歩み • 2005年 C# 2.0 – .NET Framework 2.0 に合わせてバージョンア ップ • 様々な言語仕様が追加された – C#は2.0からといっても過言ではない – 変更箇所 • ジェネリクス • 匿名メソッド • partialクラス • staticクラス • null許容型 わんくま同盟 http://www.wankuma.com/
  • 30. C#の歩み • C# 2.0 の新機能 – ジェネリクス • クラスの内部で使用する型をパラメータで指定 • あらゆる型を用いた共通処理を記述可能 • おもな適用先 – List等のコレクション わんくま同盟 http://www.wankuma.com/
  • 31. C#の歩み • C# 2.0 の新機能 – ジェネリクス 非ジェネリック ジェネリック public void Main() public void Main() { { ArrayList list = List<string> list = new ArrayList(); new List<string>(); list.Add(“hoge”); list.Add(“hoge”); list.Add(“foo”); list.Add(“foo”); list.Add(“bar”); list.Add(“bar”); // キャストが必要 // キャストが不要 string item = (string)list[1]; string item = list[1]; } } わんくま同盟 http://www.wankuma.com/
  • 32. C#の歩み • C# 2.0 の新機能 – 匿名メソッド • メソッドを定義せず、直接デリゲートに処理を格 納できる • 匿名メソッドの内部では、外のスコープのローカ ル変数も使える つまり、クロージャ(Closure) わんくま同盟 http://www.wankuma.com/
  • 33. C#の歩み • C# 2.0 の新機能 • 匿名メソッド コード 実行結果 delegate MyDelegate(string s); hoge public void Main() hoge { hoge int num = 5; hoge MyDelegate mydlg = delegate(string s) { hoge for ( int i = 0; i < num; i++ ) { Console.WriteLine(s); } }; mydlg(“hoge”); } わんくま同盟 http://www.wankuma.com/
  • 34. C#の歩み • C# 2.0 の新機能 – partialクラス(部分クラス) • 一つのクラスの定義を複数の箇所で記述できる • 用途 – デザイナ生成部分とビジネスロジックを分けて記述 – 対象オブジェクトごとにコードを分けて記述 – etc... わんくま同盟 http://www.wankuma.com/
  • 35. C#の歩み • C# 2.0 の新機能 – partialクラス Hoge.Designer.cs Hoge.cs public class Hoge : Form public partial class Hoge { { private TextBox nameTextBox = private nameTextBox_Click new TextBox(); (object sender, EventArgs e) { this.Controls.Add(nameTextBox); MessageBox.Show( nameTextBox.Text); this.nameTextBox.Click += } nameTextBox_Click; } } わんくま同盟 http://www.wankuma.com/
  • 36. C#の歩み • C# 2.0 の新機能 – staticクラス(静的クラス) • インスタンス化不可のクラス • staticなメンバのみ持てる • 利用方法 – 算術計算など、インスタンス化不要なメソッド群を定義 する、など わんくま同盟 http://www.wankuma.com/
  • 37. C#の歩み • C# 2.0 の新機能 – staticクラス public static MyStaticClass { public static int Count; public static void MyStaticMethod() { } } わんくま同盟 http://www.wankuma.com/
  • 38. C#の歩み • C# 2.0 の新機能 – null許容型(Nullableクラス) • null代入が可能な値型 – 通常の値型はnull代入不可 わんくま同盟 http://www.wankuma.com/
  • 39. C#の歩み • C# 2.0 の新機能 – null許容型 public void Main() { int? a = null; int b = a *2 ?? 0; // ??:左項がnullの場合、右項を適用 Nullable<decimal> c = null; // これでもよい } わんくま同盟 http://www.wankuma.com/
  • 40. C#の歩み • 2008年 C# 3.0 – .NET Framework 3.5 に合わせてバージョンア ップ • 数々の生産性が上がるような仕様が追加された – 変更箇所 • 型推論 • ラムダ式 • 匿名型 • オブジェクト初期化子、コレクション初期化子 • 自動プロパティ • LINQ わんくま同盟 http://www.wankuma.com/
  • 41. C#の歩み • C# 3.0 の新機能 – 型推論 • 型を指定せずに変数が書ける • ただし制限事項がある – ローカル変数のみ – 同時に変数の初期化を行う必要あり – 初期化する際、型が一意に定まる わんくま同盟 http://www.wankuma.com/
  • 42. C#の歩み • C# 3.0 の新機能 – 型推論 public void Main() { var s = “hoge”; // string型 var a = 100; // int型 var f = 1.1; // double型 s = 100; // コンパイルエラー // すでに型が定まった変数に別の型の値は入れられない var dic = new Dictionary<string, List<decimal>>(); // こういう長い名前の型を左辺に指定しなくてもよくなる } わんくま同盟 http://www.wankuma.com/
  • 43. C#の歩み • C# 3.0 の新機能 – ラムダ式 • 匿名メソッドのsyntax sugar • デリゲートの記述方法の一つ – ラムダ式という概念についてはWikipediaあたりを参照し てください(^^; ラムダ式を使うとクロージャが簡単に書 ける! わんくま同盟 http://www.wankuma.com/
  • 44. C#の歩み • C# 3.0 の新機能 – ラムダ式 ※Rubyでの同等の記述 public void Main() coll = [ { “hoge” var list = new List<string>(); ,”foo” list.Add(“hoge”); ,”bar” ] list.Add(“foo”); list.Add(“bar”); coll.each { |s| puts “名前:” + s list.ForEach( } s => Console.WriteLine(“名前:” + s) ); } わんくま同盟 http://www.wankuma.com/
  • 45. C#の歩み • C# 3.0 の新機能 – 匿名型 • スコープ内でのみ使用可能な型を定義 • 型推論を使用した場合のみ使える わんくま同盟 http://www.wankuma.com/
  • 46. C#の歩み • C# 3.0 の新機能 – 匿名型 public void Main() { var taro = new { Name = “太郎”, Age = 27, Sex = “男” }; Console.WriteLine(“私の名前は{0}です。” + “年は{1}です。” + “性別は見ての通り{2}です。” ,taro.Name ,taro.Age ,taro.Sex ); } わんくま同盟 http://www.wankuma.com/
  • 47. C#の歩み • C# 3.0 の新機能 – 自動プロパティ • privateフィールドを自動的に用意してくれる • get,setそれぞれアクセス指定可能 わんくま同盟 http://www.wankuma.com/
  • 48. C#の歩み • C# 3.0 の新機能 – 自動プロパティ public class Employee { public string Name { get; set; } public string Organization { get; set; } } わんくま同盟 http://www.wankuma.com/
  • 49. C#の歩み • C# 3.0 の新機能 – オブジェクト初期化子 • オブジェクトのプロパティを簡単に初期化できる 構文 – コレクション初期化子 • コレクションの要素を簡単に初期化できる構文 わんくま同盟 http://www.wankuma.com/
  • 50. C#の歩み • C# 3.0 の新機能 – オブジェクト初期化子、コレクション初期化子 public void Main() { var empList = new List<Employee> { new Employee { Name = “太郎”, Organization = “ほげCorp.” } ,new Employee { Name = “次郎”, Organization = “ふが商店” } ,new Employee { Name = “花子”, Organization = “ぱよストア” } }; } わんくま同盟 http://www.wankuma.com/
  • 51. C#の歩み • C# 3.0 の新機能 – LINQ • 様々なオブジェクトをターゲットに、クエリ式で アクセスできる – Object – XML – SQL これまで紹介した新機能は、 すべてLINQのためのもの わんくま同盟 http://www.wankuma.com/
  • 52. C#の歩み • C# 3.0 の新機能 – LINQ public void Main() { var emps = new List<Employee> { new Employee { Name = “太郎”, Organization = “ほげCorp.” } ,new Employee { Name = “次郎”, Organization = “ふが商店” } ,new Employee { Name = “花子”, Organization = “ぱよストア” } }; var query = from emp in emps where emp.Name.EndWith(“郎”) select new { EmpName = emp.Name, EmpOrg = emp.Organization }; query.ForEach(emp => Console.WriteLine(emp.EmpName)); } わんくま同盟 http://www.wankuma.com/
  • 53. C#の歩み • 2009年? C# 4.0 – Visual Studio 2010の発表に合わせてリリース 予定 – 追加される機能の予定 • 動的型付変数 – 動的言語のように書ける? • 並列処理のサポート – マルチスレッドプログラミングを簡単に 詳細は割愛! わんくま同盟 http://www.wankuma.com/
  • 55. C#のすごいところ • 思考→プログラムに落とし込みやすい – 型推論、ラムダ式、LINQなどを使うと、ロジ ック以外の雑多なことから解放される • なんといってもデリゲート – プログラムをクラスという縛りから解放して くれる – ラムダ式を使えば簡単に書ける わんくま同盟 http://www.wankuma.com/
  • 56. C#のすごいところ • 実はWindows APIとの親和性が高い – いざとなれば、APIを直にたたくことも可能 • P/Invokeね – さらにポインタも使える – COMとの相互運用もサポート • ちょっと注意が必要だけど わんくま同盟 http://www.wankuma.com/
  • 58. まとめ • C#はWindowsの現実を踏まえたごった煮言 語(©猪俣健太郎さん) – 低レベルから高レベルまで幅広くカバー • 機能は豊富だが使いやすく設計されている – 怖くないよ! • 特にC# 3.0で追加された仕様群は生産性を 数倍アップさせてくれる – 可能性を秘めている・・・ わんくま同盟 http://www.wankuma.com/
  • 59. まとめ しっかり使いこなして 定時で帰りましょう v(^ ^)v わんくま同盟 http://www.wankuma.com/
  • 60. おしまい! ご静聴ありがとうございました <(_ _)> わんくま同盟 http://www.wankuma.com/
  • 61. 参考資料 • C#の現在・過去・未来 (わんくま同盟勉強会 東京#23 - えムナウさん) http://www.wankuma.com/seminar/20080809tokyo23/Default.aspx • 解題:私がJavaからC#に乗り換えた10の理由 (わんくま勉強会東京 #26 LT – 猪俣健太郎さん) http://d.hatena.ne.jp/matarillo/20081116/p1 • Visual C# - MSDN Library http://msdn.microsoft.com/ja-jp/library/kx37x362(VS.80).aspx • C# - Wikipedia http://ja.wikipedia.org/wiki/C_Sharp わんくま同盟 http://www.wankuma.com/