Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
4
•
•
delegate
C# 1.X C# 2.0 C# 3.0 C# 4.0 C# 5.0
class
手続き型 関数型
ラムダ式
LINQ
型推論
ジェネリック
拡張メソッド
動的型付け
dynamic
非同期
async/await
オ...
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
ちゃんとやれよ。
何ちゃんとやってんだ!
•
•
•
•
メソッドが取り替えられないなら
インスタンスを取り替えてしまえば
良いじゃない
•
•
•
•
•
class PlayerTable
: IEnumerable<KeyValuePair<Board.Piece, IPlayer>> {
Dictionary<Board.Piece, IPlayer> playerDictionar...
class PlayerChecker
{
readonly Board.Piece theStrongestPiece;
readonly PlayerTable playerTable = new PlayerTable(
players:...
class PieceChanger : IDisposable
{
readonly Board.Piece[,] boardDataOriginal;
readonly Board.Piece[,] boardData;
public Pi...
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」
Upcoming SlideShare
Loading in …5
×

BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」

2017/01/28 BuriKaigi2017 in Toyama
https://toyama-eng.connpass.com/event/45745/

  • Be the first to comment

  • Be the first to like this

BuriKaigi2017 in Toyama「C# 大好き MVP による、C# ドキドキ・ライブコーディング!! ~小島の分~」

  1. 1. • • • •
  2. 2. • • • •
  3. 3. • • • • • • 4
  4. 4. • • delegate C# 1.X C# 2.0 C# 3.0 C# 4.0 C# 5.0 class 手続き型 関数型 ラムダ式 LINQ 型推論 ジェネリック 拡張メソッド 動的型付け dynamic 非同期 async/await オブジェクト 指向 Parallel …
  5. 5. • • • • • • • •
  6. 6. • • • •
  7. 7. • • • • • • •
  8. 8. • • ちゃんとやれよ。 何ちゃんとやってんだ!
  9. 9.
  10. 10. • • • メソッドが取り替えられないなら インスタンスを取り替えてしまえば 良いじゃない
  11. 11. • • •
  12. 12. • • class PlayerTable : IEnumerable<KeyValuePair<Board.Piece, IPlayer>> { Dictionary<Board.Piece, IPlayer> playerDictionary = new Dictionary<Board.Piece, IPlayer>(); …… } class GameRunner { …… }
  13. 13. class PlayerChecker { readonly Board.Piece theStrongestPiece; readonly PlayerTable playerTable = new PlayerTable( players: new IPlayer[] { new PlayerRyotaMurohoshi(), new PlayerAILight (), new PlayerXin9le (), new PlayerFujiwo3 () } ); public static Board.Piece TheStrongestPiece => theStrongestPiece; …… }
  14. 14. class PieceChanger : IDisposable { readonly Board.Piece[,] boardDataOriginal; readonly Board.Piece[,] boardData; public PieceChanger(Board.Piece[,] boardData, Board.Piece privatePiece) { if (privatePiece.IsOldMansPiece()) { this.boardData = null; boardDataOriginal = null; } else { this.boardData = boardData; boardDataOriginal = (Board.Piece[,])boardData.Clone(); Change(privatePiece); } } void Change(Board.Piece privatePiece) { …… } …… }

×