NGK2013B – 名古屋合同懇親会 2013忘年会 – Kouji

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Bluetooth で Go! Bar Windows 8 in 名古屋 with 8.1 けきょ( Kouji )
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
.NET Framework 4.0 世代の Expression Trees
Applet 岡部 祐典 鈴木 敬幸.
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
C# 3.0をはじめよう!!.
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
とても使いやすい Boost の serialization
アルゴリズムとデータ構造1 2007年6月12日
とても使いやすい Boost の serialization
haXeでオリジナルコンポーネント作り WCAN mini Vol 小笠原
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
PHP Framework Update symfony 編 株式会社ディノ 月宮紀柳.
社会人学習講座 「Javaプログラミング概論」
C# の現在・過去・未来 えムナウ (児玉宏之)
アルゴリズムとデータ構造 2011年6月20日
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
コンパイラの解析 (2) GCJのデータ構造 - 1.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
R流・C#マルチスレッドの復讐 2009年05月16日 R・田中一郎
C# の現在・過去・未来 えムナウ (児玉宏之)
第11週:super/subクラス、継承性、メソッド再定義
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Null ヤバイのでなんとかする takeshik.
Null ヤバイのでなんとかする takeshik.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年7月5日
もっと詳しくArrayクラスについて調べるには → キーワード検索
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
オブジェクト指向プログラミング クラス 継承
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
nativeの基礎知識 「ポインタ」てなによ!?
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月21日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
How To WPF アプリケーション Part3 By 中博俊.
Presentation transcript:

NGK2013B – 名古屋合同懇親会 2013忘年会 – Kouji Matsui @kekyo 山椒の味は大人の味 NGK2013B – 名古屋合同懇親会 2013忘年会 – Kouji Matsui @kekyo

自己紹介 kekyo (けきょ) 会社やってます。現在はフレームワークのアーキテクト しています。 主に.NET Framework C#使いです。C++とかアセンブラ もやります。大体1から10まで全部やってしまうので、 出来るだけ拘束具をはめてます。

山椒と言えば... やっぱりウナギですね。 ウナギは絶滅が危惧されてい るようで、名古屋人には残念 なことです。 やっぱりウナギですね。 ウナギは絶滅が危惧されてい るようで、名古屋人には残念 なことです。 鰻丼にふりかける山椒は、 苦くも旨い、そういう話です。

.NET Frameworkの山椒とは オブジェクト参照の事ですよ、奥さん。 おいしいですなぁ。でも、独自の味付けのお蔭で、素材本来の 参照が生かせないんですよ。 で、味付けって、何? 「Equals」と「GetHashCode」ですよ。

料理ごとの調味料♪ 材料:Equals : 1オーバーライド GetHashCode : 1オーバーライド public override bool Equals(object obj) { return unagi_.Equals(((UnaDon)obj).unagi_); } public override int GetHashCode() { return unagi_.GetHashCode(); }

素材の味が知りたいよね 同じウナギかどうかを確認するには、 「object.ReferenceEquals」を使えばいい。 // これは私の鰻丼? var unadon1 = new UnaDon(); var unadon2 = unadon1; var unadon3 = new UnaDon(); Debug.Assert(object.ReferenceEquals(unadon1, unadon2) == true); Debug.Assert(object.ReferenceEquals(unadon1, unadon3) == false); で、参照のハッシュコードは?

加工されていると分からない GetHashCodeがオーバーライドされていると、本来の参照 ハッシュコードを取得できなくなります。 そこで、名代秘伝の技を使うわけです。その名も「Emit」。 // 動的にクラスとメソッドを作っちゃう。取り合えず、イメージはこんな感じ public static class ObjectReference { public static int GetReferenceHashCode(object instance) // (C#では書けない、あんなことやこんなこと...) } }

下積みは省略して、秘伝のタレ えええ?! 「 object.GetHashCode」は仮想メソッドです。これを呼び 出す時はIL命令「CallVirt」を使います。 しかし、ここでは掟を破って「Call」を使う。 var objectGetHashCodeMethod = typeof(object).GetMethod(“GetHashCode”); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Call, objectGetHashCodeMethod); ilGenerator.Emit(OpCodes.Ret); getHashCodeDynamic_ = (Func<object, int>)Delegate.CreateDelegate( typeof(Func<object, int>), typeBuilder.CreateType().GetMethod(“GetReferenceHashCode”));

そして名工の治具へ 出来上がったデリゲートを 「ObjectReferenceEqualityComparer」に組み込みます。 public sealed class ObjectReferenceEqualityComparer : IEqualityComparer { public int GetHashCode(object instance) return getHashCodeDynamic_(instance); } public bool Equals (object x, object y) return object.ReferenceEquals(x, y); } } うひょうひょうひょうひ

これで多い日でも安心 var hashSet = new HashSet<UnaDon>(new ObjectReferenceEqualityComparer()); hashSet.Add(new UnaDon());

See you! ご静聴ありがとうございました Advent LINQやってます。 http://kekyo.wordpress.com/ おもちゃの行進曲@音楽研究所 http://www.asahi-net.or.jp/~HB9T-KTD/music/Japan/Studio/midi.html