プロジェクト管理
Visual Studio で C# を使ったプログラム開発を行う場合、まず、「プロジェクト」というものを作ります。 また、この際、「ソリューション」というものが一緒に作られます。 ここでは、そのプロジェクトの作り方の簡単な紹介と、プロジェクトやソリューションが何なのか、どうして必要なのかを説明します。 概要 Visual Studio で C#...
View ArticleCode-Awareなライブラリ
.NET Compiler Platformによって、Code-Awareなライブラリを作れるようになりました。 Code-Aware、直訳すると「コードを理解している」「コードを意識している」という感じになります。ライブラリだけでなく、ライブラリ利用側のコードを理解して、問題点の指摘やその修正方法まで提供することを言います。 概要 Ver. 6 (C# 6の言語的な機能ではありませんが、C#...
View Articleプロジェクトの分割
プログラムや、プログラムを作るための部品は「プロジェクト」という単位で管理します。 ここでは、プロジェクトという単位に分ける動機などについて説明していきます。 概要 プロジェクト管理で触れたように、プログラムや、プログラムを作るための部品は「プロジェクト」という単位で管理します。 依存関係を考える最小単位がプロジェクト .NETの場合、プロジェクトの成果物は「アセンブリ」(dllもしくはexe)...
View Article型フォワーディング
.NETでは、「アセンブリ+名前」の組み合わせで型を厳密に判定します。 その結果、異なるアセンブリでまったく同じ名前の型を定義しても、それぞれ別の型として扱われます。 これは、人的ミスの削減や、悪意あるコードへの耐性につながる一方で、 型の定義場所を移動させたいときに困ります。 そこで.NETは、型の検索の際に、別のアセンブリに転送する仕組みを提供しています。 これを型フォワーディング(Type...
View Articleトップ レベルのアクセシビリティ
実装の隠蔽で、5種類のアクセシビリティ(4つのキーワードとその組み合わせ)を紹介しました。 クラスや構造体のメンバーについてはこの5種類全てを選べる一方で、トップ レベルの型には public, internal の2つのうちのどちらかだけが選べます。 トップ レベルのアクセシビリティは、アセンブリを超えてその型を使えるかどうか(public なら使える、internal...
View Article構造体
クラスと構造体は、次節で説明する「値型」か「参照型」かの違いに起因します。構造体は値型で、そのためにクラスと比べていくつか用途に制限がかかります。 概要 「データの構造化」で少し触れて以来、ずっとクラスだけを使って説明してきましたが、ここで、C#における「もう1つの複合型」である構造体について説明します。...
View Articletest
test https://github.com/ufcpp/UfcppSample/blob/master/BreakingChanges/VS2015_CS6/KatakanaMiddleDot.cs#L15-22 test https://gist.github.com/ufcpp/03dd6fc45b643e580d20 test MathJax MathML <math...
View Article[雑記] 多重継承できない理由
「継承」で説明した通り、C#ではクラスの多重継承を認めていません。すなわち、どんな型も基底クラスは1つだけです。制限なしの多重継承は実装のコストが結構高く、メリットに対してコストが見合わないというのが一般的な見方です。ここでは、その多重継承にかかるコストについて説明していきます。 オブジェクトのメモリ レイアウト 多重継承を認めた場合に問題となるのは、オブジェクトのメモリ...
View Article[雑記] 識別子のスコープとオブジェクトの寿命
本項では、識別子のスコープ(有効な範囲、異なるものに同じ名前を付けれない範囲)とオブジェクトの寿命(作ったオブジェクトがいつまで生きているか、ガベージ コレクションの対象外になっているか)について説明していきます。 ※ 本項では、現時点までに説明していない概念がいくつか出てきます。現時点で説明済みのものは変数くらいなので、とりあえず変数が絡むところだけ読んで、残りは後々読み直してください。...
View ArticleC#スクリプト実行
C#をスクリプト言語的に実行したり、インタラクティブ実行したりできるようになりました。 その実行方法や、通常の(コンパイルして使う)C#にはないスクリプト専用機能などについて説明します。 概要 2015年末頃、ついにC#をスクリプト言語的に実行したり、インタラクティブに実行したりできるようになりました。すなわち、以下のようなことができるようになりました。 アプリへの組み込み...
View Article[雑記] 小さな機能の組み合わせ
この記事はソフトウェアデザインに寄稿した内容が元になっています。 初出: 技術評論社刊『ソフトウェアデザイン 2016 年 4 月 号 今すぐ実践できる良いプログラムの書き方 C#編 言語機能の進化から学ぶ「良いコードの書き方」 概要 「LINQ」で説明した通り、C#にはLINQ(Language Integrated...
View Article[雑記] 構文の進化
この記事はソフトウェアデザインに寄稿した内容が元になっています。 初出: 技術評論社刊『ソフトウェアデザイン 2016 年 4 月 号 今すぐ実践できる良いプログラムの書き方 C#編 言語機能の進化から学ぶ「良いコードの書き方」 概要...
View Article数値
概要 本項では、組み込み型の補足として、整数型や浮動小数点数型など、いわゆる「数値」がらみの少し細かい話をします。 int型とdouble型 C#の数値型には、使用する記憶領域サイズ違いのものがいくつかあります。その中で代表的な位置づけにあるのは、整数ではint型(4バイト)、浮動小数点数ではdouble型(8バイト)です。 どう「代表的」かというと以下のような感じです。...
View ArticleC# 7 の新機能
C# 7 Ver. 7 リリース時期 未決定 同世代技術 Visual Basic 15 要約・目玉機能 タプル型 パターン マッチング 2016/6現在、C# 7の仕様策定・実装の真っ最中です。 状況は以下のページで確認できます。 Language Feature Status 実装が進んできたものから取り上げていきたいと思います。 ※同時に以下のページも随時更新 C#の言語バージョンと.NET...
View ArticleC# 1.0
C# 1.0 リリース時期 2002/2 同世代技術 Visual Studio .NET 2002 .NET Framework 1.0 Visual Basic 7 C#は2000年6月に発表され、それから間もなくプレビュー版が公開されました。その後、2002年に正式リリースになっています。 当時、C#開発の指揮を取っていたAnders Hejlsbergは、元々Borland社でTurbo...
View Article複合型のレイアウト
概要 複合型(クラスや構造体)では、フィールドをメモリ上にどうレイアウト(layout: 配置)するかという問題があります。 通常、メモリ上のレイアウトがどうなっているのかをプログラマーが気にする必要はありません。 大体はコンパイラーが最適な仕事をしてくれます。 それでも、時々、レイアウト方法を明示的に指定したい場合があります (おそらく、そのほとんどはC++などで書かれたネイティブ...
View Articleローカル関数と匿名関数
概要 C# には、関数内に関数を書く方法として、ローカル関数と匿名関数という2つの機能があります。 いずれも共通して、以下のような性質があります。 定義している関数の中でしか使えない 周りの(定義している関数側にある)ローカル変数を取り込める ローカル関数の方ができることは多いですが、書ける場所は少なくなります。 匿名関数はその逆で、できることに少し制限がある代わりに、どこにでも書けます。...
View Article名前のない複合型
概要 型名がなくても、メンバー名だけでその型が何をしたいものなのか十分にわかる場合があります。 このとき、むしろ、良い型名が付かない(メンバー名と重複した名前にしかならない)こともあります。 そういう場合に、「名前のない複合型」を作りたくなります。 C#には、歴史的経緯から、匿名型(anonymous type)とタプル(tuple)という2種類の「名前のない複合型」があります。...
View Article[雑記] 小さな機能の組み合わせ
この記事はソフトウェアデザインに寄稿した内容が元になっています。 初出: 技術評論社刊『ソフトウェアデザイン 2016 年 4 月 号 今すぐ実践できる良いプログラムの書き方 C#編 言語機能の進化から学ぶ「良いコードの書き方」 概要 「LINQ」で説明した通り、C#にはLINQ(Language Integrated...
View Article