Lets Enjoy C#!
Upcoming SlideShare
Loading in...5
×
 

Lets Enjoy C#!

on

  • 4,222 views

 

Statistics

Views

Total Views
4,222
Views on SlideShare
4,174
Embed Views
48

Actions

Likes
0
Downloads
13
Comments
0

3 Embeds 48

http://blogs.wankuma.com 45
http://www.slideshare.net 2
http://74.125.95.132 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Lets Enjoy C#! Lets Enjoy C#! Presentation Transcript

  • 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/