C# の現在・過去・未来 えムナウ (児玉宏之)

Slides:



Advertisements
Similar presentations
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
本プレゼンテーション ( 以下、本書 ) で提供されている情報は、本書が 発表された時点における Microsoft の見解を述べたものです。市場 ニーズの変化に対応する必要があるため、本書は記載された内容の実 現に関する Microsoft の確約とはみなされないものとします。また本 書に記載された情報の正確さについて、保証するものではありません。
.NET Framework 4.0 世代の Expression Trees
Javaのための暗黙的に型定義される構造体
C# 3.0をはじめよう!!.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
アルゴリズムとプログラミング (Algorithms and Programming)
Linq for VB はものすごい えムナウ (児玉宏之)
Linq for VB はものすごい えムナウ (児玉宏之)
オブジェクト指向言語の歴史 えムナウ (児玉宏之)
Microsoft .NET 入門 Silverlight のための 福井コンピュータ株式会社 小島 富治雄
アルゴリズムとデータ構造 2011年6月13日
はじめてのASP.NET 楽しいアプリ制作の会 #1 TWorks.
C#とC++とオブジェクト指向 上甲 健史.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
MVP for VB が語る C# 入門 初音 玲.
MVP for VB が語る C# 入門 初音 玲.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
R流・C#マルチスレッドの復讐 2009年05月16日 R・田中一郎
第6回 2007年6月1日 応用Java (Java/XML).
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
C# の現在・過去・未来 えムナウ (児玉宏之)
.NET Framework 3.0 概要 (旧称 : WinFX)
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年7月5日
もっと詳しくArrayクラスについて調べるには → キーワード検索
アルゴリズムとデータ構造 2010年6月21日
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
アルゴリズムとデータ構造1 2009年6月15日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
How To WPF アプリケーション Part4 By 中博俊.
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
How To WPF アプリケーション Part3 By 中博俊.
Presentation transcript:

C# の現在・過去・未来 えムナウ (児玉宏之) http://mnow.jp/ http://mnow.wankuma.com/ えムナウ (児玉宏之) Microsoft MVP for Development Tools Visual C# 2005/01-2008/12 http://mnow.jp/ http://mnow.wankuma.com/ http://blogs.wankuma.com/mnow/ http://www.ailight.jp/blog/mnow/

はじめに まとめ 捨ててしまったわ、昔のプライドなんて もしも許されるものなら、きっと生まれ変わる アジェンダ はじめに 捨ててしまったわ、昔のプライドなんて C#の現在過去未来概要 もしも許されるものなら、きっと生まれ変わる C#の変遷 ひとつ曲がり角ひとつ間違えて迷い道くねくね 周辺技術の変遷概要 まとめ

C#はEcma および ISO によって標準化され、日本においても JIS によって採択されています。 はじめに C#はEcma および ISO によって標準化され、日本においても JIS によって採択されています。 Delphiの仕事に携わっていたアンダース・ヘルスバーグを中心に開発されたC#ですが、いろいろな要素を吸収しながら現在も成長していってます。 今日は、その現在過去未来を追いかけてみましょう。

オブジェクト指向言語 C++ の成り立ち 捨ててしまったわ、昔のプライドなんて クラス、継承 オブジェクト FORTRAN データ COBOL データ 手続き Simula67 オブジェクト メッセージ Smalltalk オブジェクト指向 ブロック構造 ALGOL カプセル化 データ抽象化 Modula-2 弱い結合度・強い凝集度、部品化 ポリモフィズム 多重継承 構造化プログラミング C++

捨ててしまったわ、昔のプライドなんて C++ 厳密な名前空間 ポインタの隔離 JAVA ガベージコレクタ VB 多重継承 プロパティ デリゲート Object Pascal C#

捨ててしまったわ、昔のプライドなんて C# ジェネリック Ada 反復子 匿名メソッド 部分クラス C#2.0

捨ててしまったわ、昔のプライドなんて C#2.0 関数言語 ラムダ式 宣言言語 クエリ式 関数言語 管理されたAOP 拡張メソッド 暗黙型変数 匿名型 動的言語の簡便さ C#3.0

捨ててしまったわ、昔のプライドなんて C#3.0 S+S パラレル NDAの壁 モデル駆動 Silverlight2 C#4.0

もしも許されるものならきっと生まれ変わる C/C++ から C# で何が変わったか global の排除、(シングルトンやスタティックは残されているが・・・) 厳格な名前空間 と 階層構造 ポインタの隔離(unsafe の中でだけ利用できる) ガベージコレクタ組み込み と Dispose の追加 多重継承の削除・複数のインタフェースの使用 暗黙の変換を安全なものに限った プロパティの追加(ゲッター・セッターを含めた)

もしも許されるものならきっと生まれ変わる C/C++ 厳格な名前空間 ポインタの隔離 ガベージコレクタ組み込み プロパティ C# メモリーリーク バッファーオーバーラン

もしも許されるものならきっと生まれ変わる C#2.0で何が変わったか ジェネリック 反復子 と yield 部分クラス partial null許容型とnull結合演算子 匿名メソッド 名前空間のエイリアス修飾子 静的クラス static class 外部アセンブリのエイリアス extern プロパティ アクセサのアクセシビリティ デリゲートの共変性と反変性 固定サイズ バッファ fixed フレンド アセンブリ インライン警告制御  #pragma warning volatile の拡張 IntPtr ・ UIntPtr

もしも許されるものならきっと生まれ変わる ジェネリック class SimpleList : IList { public SimpleList() public int Add(SimpleClass value) public void Clear() public bool Contains(SimpleClass value) public int IndexOf(SimpleClass value) public void Insert(int index, SimpleClass value) public bool IsFixedSize public bool IsReadOnly public void Remove(SimpleClass value) public void RemoveAt(int index) public SimpleClass this[int index] public void CopyTo(Array array, int index) public int Count public bool IsSynchronized public object SyncRoot public IEnumerator GetEnumerator() } ぜんぶ実装しろと 大変な苦労が・・・ こんだけ class SimpleList : List<SimpleClass> { }

もしも許されるものならきっと生まれ変わる 反復子 と yield foreach が便利に int number; int exponent; public static System.Collections.IEnumerator GetEnumerator() {   int counter = 0;   int result = 1;   while (counter++ < exponent)   {     result = result * number;     yield return result;   } }

もしも許されるものならきっと生まれ変わる 部分クラス partial 同じクラスのファイルを分割 null許容型とnull結合演算子 int? a; でnullを許容する int の宣言 int b = a ?? -1; でnullだったらー1を代入 Employee_a.cs public partial class Employee { public void DoWork() } Employee_b.cs public partial class Employee { public void GoToLunch() }

もしも許されるものならきっと生まれ変わる 匿名メソッド 簡単なイベントハンドラ関数は不要 名前空間のエイリアス修飾子 同じ名前の名前空間の解決 静的クラス static class インスタンスを作らないで利用可能 button1.Click += delegate(object o, EventArgs e) { System.Windows.Forms.MessageBox.Show("Click!"); }; global::System.Console.WriteLine(number); static class CompanyInfo { public static string GetCompanyName() { return "CompanyName"; } }

もしも許されるものならきっと生まれ変わる C# ジェネリック 反復子 匿名メソッド 部分クラス C#2.0 手間を減らして 簡単便利に

もしも許されるものならきっと生まれ変わる C#3.0で何が変わったか 暗黙に型付けされたローカル変数 オブジェクト初期化子 コレクション初期化子 拡張メソッド 匿名型 ラムダ式 クエリ式 自動実装プロパティ 部分メソッド定義 partial メソッド

もしも許されるものならきっと生まれ変わる 暗黙に型付けされたローカル変数 var al = new List<MyAccount>(); al.Add(new MyAccount("hnaka", "553-0001", "大阪府")); al.Add(new MyAccount("hkodama", "168-0064", "東京都")); var accounts = EnumerableExtensions<MyAccount, MyAccount2>.Select( EnumerableExtensions<MyAccount, MyAccount2>.Where (al, delegate(MyAccount a) { return a.ZipCode == "168-0064"; }), delegate(MyAccount a) { return new MyAccount2(a.Name, a.ZipCode); } ); Console.WriteLine("C#3.0 暗黙に型付けされたローカル変数"); foreach (var account in accounts) { Console.WriteLine(account.Name + "(" + account.ZipCode + ")"); }

もしも許されるものならきっと生まれ変わる 拡張メソッド static class EnumerableExtension { public delegate TD SelectFunc<TS, TD>(TS t); public static IEnumerable<TD> Select<TS, TD> (this IEnumerable<TS> e, SelectFunc<TS, TD> f) foreach (TS i in e) { yield return f(i); } public static IEnumerable<TS> Where<TS> (this IEnumerable<TS> e, Predicate<TS> p) foreach (TS i in e) { if (p(i)) yield return i;

もしも許されるものならきっと生まれ変わる ラムダ式 var al = new List<MyAccount>(); al.Add(new MyAccount("hnaka", "553-0001", "大阪府")); al.Add(new MyAccount("hkodama", "168-0064", "東京都")); var accounts = al .Where(a => a.ZipCode == "168-0064") .Select(a => new MyAccount2(a.Name, a.ZipCode)); Console.WriteLine("C#3.0 ラムダ式"); foreach (var account in accounts) { Console.WriteLine(account.Name + "(" + account.ZipCode + ")"); }

もしも許されるものならきっと生まれ変わる オブジェクト初期化子および コレクション初期化子 var al = new List<MyAccount> { new MyAccount{Name="hnaka",ZipCode="553-0001",Prefecture="大阪府"}, new MyAccount{Name="hkodama",ZipCode="168-0064",Prefecture="東京都"} }; var accounts = al .Where(a => a.ZipCode == "168-0064") .Select(a => new MyAccount2 { Name = a.Name, ZipCode = a.ZipCode }); Console.WriteLine("C#3.0 オブジェクト初期化子および コレクション初期化子"); foreach (var account in accounts) { Console.WriteLine(account.Name + "(" + account.ZipCode + ")"); }

もしも許されるものならきっと生まれ変わる 自動実装プロパティ 部分メソッド定義 partial メソッド class LightweightCustomer { public double TotalPurchases { get; set; } public string Name { get; private set; } // read-only public int CustomerID { get; private set; } // read-only } Employee_a.cs public partial class Employee {   // 宣言だけ partial void onNameChanged(); } Employee_b.cs public partial class Employee { partial void onNameChanged() // 実装コード }

もしも許されるものならきっと生まれ変わる 匿名型 var al = new [] { new {Name="hnaka",ZipCode="553-0001",Prefecture="大阪府"}, new {Name="hkodama",ZipCode="168-0064",Prefecture="東京都"} }; var accounts = al .Where(a => a.ZipCode == "168-0064") .Select(a => new { Name = a.Name, ZipCode = a.ZipCode }); Console.WriteLine("C#3.0 匿名型"); foreach (var account in accounts) { Console.WriteLine(account.Name + "(" + account.ZipCode + ")"); }

もしも許されるものならきっと生まれ変わる クエリ式 var al = new[] { new {Name="hnaka",ZipCode="553-0001",Prefecture="大阪府"}, new {Name="hkodama",ZipCode="168-0064",Prefecture="東京都"} }; var accounts = from a in al where a.ZipCode == "168-0064" select new { Name = a.Name, ZipCode = a.ZipCode }; Console.WriteLine("C#3.0 クエリ式"); foreach (var account in accounts) { Console.WriteLine(account.Name + "(" + account.ZipCode + ")"); }

もしも許されるものならきっと生まれ変わる C#2.0 暗黙に型付けされたローカル変数 ラムダ式 オブジェクト初期化子 コレクション初期化子 クエリ式 拡張メソッド 自動実装プロパティ 匿名型 partial メソッド C#3.0 すべてはLinqのために

もしも許されるものならきっと生まれ変わる パラレルLinq・パラレルFor int[] data = new int[] { 0, 1, 2, 3 }; int[] data2 = (from x in data.AsParallel() select x * x).ToArray(); int[] data = new int[] { 0, 1, 2, 3 }; Int[] data2 = new int[] { 0, 0, 0, 0 }; Parallel.For(0, 3, delegate(int i) {data2[i] = data[i] * data[i]; }); ここでいきなりクイズです。 結果として得られる data2 は同じものですか?

ひとつ曲がり角ひとつ間違えて迷い道くねくね データアクセス バージョン 便利なアクセス手段 データ表現 Microsoft Visual Studio 2002 .NET Framework 1.0 DataAdapter DataSet DataTable Microsoft Visual Studio 2005 .NET Framework 2.0 TableAdapter Microsoft Visual Studio 2008 .NET Framework 3.5 Linq to SQL DataContext メソッド DataContext object .NET Framework 3.5 SP1 Linq to Entity ObjectContext メソッド ObjectContext EntityObject

ひとつ曲がり角ひとつ間違えて迷い道くねくね データアクセス DAO ADO DataSet Linq to SQL Linq to Entity

ひとつ曲がり角ひとつ間違えて迷い道くねくね Windowsアプリケーション バージョン テクノロジ 表の表現 Microsoft Visual Studio 2002 .NET Framework 1.0 Windows Forms DataGrid Microsoft Visual Studio 2005 .NET Framework 2.0 DataGridView .NET Framework 3.0 WPF ListView Microsoft Visual Studio 2008 .NET Framework 3.5 SP1?

ひとつ曲がり角ひとつ間違えて迷い道くねくね Webアプリケーション バージョン テクノロジ Microsoft Visual Studio 2002 .NET Framework 1.0 ASP.NET SOAP Microsoft Visual Studio 2005 .NET Framework 2.0 Ajax Silverlight1.0 Microsoft Visual Studio 2008 .NET Framework 3.5 SP1? Silverlight2.0 ソフトウェア+サービス

ひとつ曲がり角ひとつ間違えて迷い道くねくね クライアントOS 西暦 1981年 MS-DOS 1986年 Windows 1.0 1993年 3.1 1995年 95 1998年 98 2000年 Me 2001年 XP 2007年 Vista 2009年? Windows7(仮称) ????年 Midori(コードネーム)

C#の現在過去未来を駆け足で見てきましたが、いろいろな技術を貪欲に取り入れながら、進化し続けていっています。 まとめ C#の現在過去未来を駆け足で見てきましたが、いろいろな技術を貪欲に取り入れながら、進化し続けていっています。 同様にOSやフレームワークの技術も進化し続けていっています。 世の中、まだ、VB6やMFCやASPを使った仕事が多いとも聞きますが、新しい技術も勉強していかなければならないと思っています。