C#入門

Visual Sutdio 2012

一番下の項目の全般的に設定するを選択する



● 新しくプロジェクト追加する方法

ファイル - 新規作成 - 新しいプロジェクトを選択する。

新しいプロジェクト画面の空のプロジェクトを選択し、任意の名前を付けてOKボタンを押下する。


● 新しくクラスやインタフェースに追加する場合

ソリューションエクスプローラの作成したプロジェクト名を右クリックして、

追加 - 新しい項目を選択する。

新しい項目の追加画面で追加したい項目を選択して、

名前をつけて追加ボタンを押下する。


Partial
別のファイルでクラスを追加しても、
同じクラスとして扱える。
多くなりすぎたり、難しくなりすぎて機能追加したくないクラスに
自分で新しくクラスを追加することができるので、
メンテナンス性とコードが読みやすくなる。
 
文字列を数値に変換する
string no = "1222x"
int myNo;
bool result = int. TryParse(no, out myNo);
// 文字列を数値に変換できなかった場合。(今回はxがあるので、数値に変換できない)
if(result == true){
 // 変換に成功
}
else{
 // 変換に失敗
}

 

● XMLドキュメントコメント
///(スラッシュを3回押す)
自動的に下記のスマートコメント編集が作られる。
/// <summary>
///
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
このスマートコメント編集はXML形式のファイルで吐き出してくれる。
XML形式のファイルなら自分達のドキュメント管理形式にいくらでも加工できる。
 
● 名前空間やアセンブリ名や出力の種類(*.exe, *.dll)は、
メニュー - プロジェクト - ○○○○(プロジェクト名)のプロパティを選択する。
から変更できる。

 

● 初期化を集約できます。

● 拡張メソッド
既存のクラスを変更しないで、
外部のクラスから既存のクラスにメソッドを追加することができる。
既存クラスをそのままで、新しくメソッドを追加したいときに使用する。
 
● 構造体とクラスの違い
クラスは参照型だが、構造体は値型
構造体は継承ができない(処理が速くなる)
クラスで代用できるので、ほとんど構造体は使われない。
● アクセス修飾子
internal : 同じアセンブリ(*.exe, *.dllなど)に含まれる要素からのアクセス可能です。
● 多態性
派生クラスは基本クラスであるという関係性が成り立つ。
犬(派生クラス)は動物(基本クラス)である。
異なるオブジェクトに対して同じメッセージを送ると、
そのオブジェクトに適した処理を実現できる。
・メソッドのオーバーライド
基本クラスのメソッドを派生クラスのほうで、
同じ名前のメソッドを上書きする場合に用いる。
派生クラスで基本クラスのメソッドを上書きしてもよいという、
許可を与えるvirtualで基本クラス側のメソッドを定義する。
派生クラス側はoverrideでメソッドを定義する。
 
・メソッドの隠蔽
オーバーライドをさらに強力にしたもの。
基本クラスのメソッドを書き換えることができる。
オーバーライドは基本クラスのvirtualの定義が必要だが、
隠蔽の場合は、基本クラスでvirtualが定義されていなくても派生クラス側でnewで定義すれば、
基本クラスのメソッドを書き換えることができる。
基本クラスをなんらかの理由で変更できない場合に用いる。
● 抽象クラス
・使い方
abstract class MyClass
{
 ;
}
抽象クラスはインスタンス化できないので、
派生クラスがあるというのが前提。
抽象クラスはどういった処理が必要かという処理の名前だけ宣言する。

 

●抽象メソッド
public abstract bool Transefer(double dDistance);
 
● シールクラス
・使い方
sealed class MyClass
{
 ;
}
継承を禁止することができる、構造体と同じ。
構造体と同じということは処理は早い。
なので、今後、派生する可能性がない場合は、
sealedで継承を禁止しておくほうがよい。
 
● インターフェース
・使い方
interface IMyClass
{
 ;
}
処理のみ宣言する。抽象クラスと同じ。
多重継承に適している。
インタフェースを継承して、
派生クラスでメソッドを定義しないとコンパイルエラーになる。
インターフェースを定義する場合は別ファイルのほうがわかりやすい。
インターフェースはテンプレートがある。
現在のプロジェクトにマウスカーソルを持って行って右クリック。
追加 - 新しい項目を選択して、インターフェースを選択する。
 
● 参照設定を追加する方法
ソリューションエクスプローラ
にある参照設定
ソリューションエクスプローラの
すべてのファイルを表示アイコンをクリックすると、
普段非表示のフォルダを見ることができる。
 
例)データベースのライブラリを使いたい。
System.data.
必要なクラスライブラリを追加しないといけない。
参照設定を右クリック、参照の追加を選択
参照の追加ボタンの参照の追加タブのSystem.dataを選択して、OKボタンを押下する。
ただし、最初で適切なプロジェクトテンプレートを選べば、
最初から必要なクラスライブラリが追加されている。
自分が作ったクラスライブラリやテンプレートにないクラスライブラリは上記の手順で、
自分で追加する必要がある。
 
● 自分で作ったクラスライブラリはbinフォルダにないと、起動できない。
なら、SystemやSystem.dataの*.dllはbinフォルダに存在しないがなぜ起動できるのか?
c - windows - assemblyに.Net FramWork が提供しているライブラリが存在する。
 
● 自分でクラスライブラリを作る方法
ソリューションエクスプローラのソリューションにフォーカスを合わせて、
右クリックして、追加を選択する。
クラスライブラリを選択して、名前をつけてOKボタンを押下する。
必要なコーディングをしてビルドすると
bin - Debugフォルダに*.dllができている。
そして、メインプロジェクトに自分で作ったクラスライブラリを参照設定する方法
メインプロジェクトの参照設定を右クリックで追加を選択する。
同じプロジェクト内にある*.dllを追加する場合はプロジェクトタブにあるので、
選択してOKボタンを押下する。
メインプロジェクトのほうで、”using 追加したクラスライブラリの名前 ”を追加すれば、
自分で作ったクラスライブラリが使用できるようになる。
● 配列
型がわからない場合はvarで宣言する
var 変数名 = new []{10, 20, 30};
ただし、異なるデータ型の初期値を混同することはできない。
{10, 20 , "Hello"}
どうしても異なるデータ型の初期値を設定したい場合はObject型を使用すれば、
できないことはないが、明確な型を決めないと混乱を招くだけなのでやらないほうがいい。
● foreach
配列の全要素分ループする
ArrayList ar = new ArrayList();
ar.Add("Hello");
foreach (object obj in ar)
{
    Console.WriteLine(obj);
}
arの要素分ループを回す
● System.Collectons.ArrayListクラス
型を指定しなくても大丈夫
動的な
 
● ジェネリック List< 型 >
明確に型をしていすることで、パフォーマンスが向上する
型が明確になっていれば、バグを生む可能性を減らすことができる。
List<int> myIntArray = new List<int>();
myIntArray.add(100);
foreach(int val myIntArray)
{
 console.WriteLine(val);
}
クリアメソッドを指定すると配列の中身を消すことができる。
myIntArray.clear();
 
● ++a, a++ の違いをもっとちゃんと理解すること!
 
● デリゲート
なんらかのメソッドの動きを代理で実行する仕組み。
// デリゲート型の定義---戻り値:なし、引数:string型1つ
delegate void SampleDelegate(string msg);
デリゲートと呼び出すメソッドの引数は一致していないといけない。
なんで必要?
デリゲートが必要な場合は、
ウィンドーズアプリケーションのUI。
UIを処理できるのはメインスレッドだけ。
つまり、メインスレッドからしかUIを操作できない。
サブスレッドや*.dllからUIを操作しようとすると例外が発生してしまう。
なので、メインスレッドにデリゲートを作って、
サブスレッドからメインスレッドのデリゲートに依頼して、
メインスレッド側で代理で実行してもらう。
 
● 文字連結するときは
stringBuilderクラスの
append
● TODOトークンで作業を管理できる
コーディングする前に
// TODO:
で必要な処理をコメントで追加しておく。
このスタイルで記述すると、
表示メニュー - タスク一覧を選択すると、
タスク一覧に//TODO:の内容が表示される。
うまくつかえば作業状況がわかる。
//DONE
やることがおわったら
//TODO:

//Done
にするとタスク一覧から消える。
 
● ファイル - ソース管理もうまく使えば、管理もできる。
詳しくは自分で調べて!
● LINQを使えば、配列などのデータをきれいにコーディングができる。
今回のセミナーで発見した自分の弱い部分。
配列を使ったデータの取り扱いはまだ弱い。
ジェネリック
デリゲートやイベントの使い方。
継承
抽象クラスとインターフェースの違いは?
どちらも
インターフェースは多重継承が認められいる。



配列の要素数がほしいとき、
Listは拡張メソッドのCount()でもいいが、
配列の場合は、Lengthを使うこと。

 

Count()は拡張メソッドなので、処理のオーバーヘッドが大きい。
処理のオーバーヘッドが大きいと、後々これらのオーバーヘッドが積み重なって、
処理が重くなって、画面の更新が遅くなってしまう。