<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/cmatome/">
    <title>cmatome @ ウィキ</title>
    <link>http://w.atwiki.jp/cmatome/</link>
    <atom:link href="https://w.atwiki.jp/cmatome/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>cmatome @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-12-12T01:32:03+09:00</dc:date>
    <utime>1260549123</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/21.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/cmatome/pages/15.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/24.html">
    <title>11_列挙型 名前空間</title>
    <link>https://w.atwiki.jp/cmatome/pages/24.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm9018860

*&amp;color(green){列挙型Enum}
***Enumの基本的な書き方
特定のものしか代入できなくした型
 enum Toho{Marisa, Reimu, Nitori, Chirno}
これで、Toho型の変数にはMarisa～Chirnoの4つ以外は代入無理。
動画のプログラム
 using System;
 
 class Test13{
     enum Toho{Marisa, Reimu, Nitori, Chirno};    //ここのセミコロンはつけなくてもおｋ
 
     public static void Main(){
         Toho toho = Toho.Marisa;    //Toho.Marisaが○。Marisaだけ×
         if(toho==Toho.Marisa)
             Console.WriteLine(&quot;やっぱり魔理沙！&quot;);
         else if(toho==Toho.Reimu)
             Console.WriteLine(&quot;やっぱり霊夢！&quot;);
         }
 }
動画の説明だけでenumはどんな風に使うのかわかると思います。
この程度ならifでもいいけど、列挙型や条件が多くなるとうざいから
&amp;color(red){switch～case}を使うほうがオススメ。
 switch(toho){
     case Toho.Marisa : Console.WriteLine(&quot;やっぱり魔理沙！&quot;);break;
     case Toho.Reimu : Console.WriteLine(&quot;やっぱり霊夢！&quot;);break;
C言語だとtoho==Marisa;みたいに書いてもエラーにならなかったけど
C#ではエラーになります。C言語から来た人いるのか知らないけど注意。
enumの書き方ですが、クラスの外においても問題なし
 enum Toho{Marisa, Reimu, Nitori, Chirno}
 class Test13{
 //enum部分以外同じなので省略
 }
あたりまえですが、クラスの中でenumを書くとそのクラス内でしかそのenumは使えません。
 class Test{
     //enum定義
 }
 class Test2{
     //この部分ではTestのenumは使えない
 }
Testの外にだして置けば複数のクラスで同じenumを使えます。
あと、enum Toho{Marisa, Reimu, Nitori, Chirno, }
のようにChirnoの次にもコンマ(,)をつけられる。機能はつけてもつけなくても全く同じですがつけておけば、後でもうひとつ定数を付け足したいとき等にほんのちょっとだけ便利。ささいなことだけど知っとくと役に立つかも・・・。

**&amp;color(green){列挙型は数にキャストできる}
実は列挙型はただの数値の集合に名前をつけたようなもの。
列挙型の最初から0,1,2,3・・・ってなってます。(Toho型ならMarisaが0, Reimuが1,Nitoriが2)
さすがにint x=Toho.Marisa;みたいに直接は代入できませんが
&amp;color(red){キャスト}すればおｋ
int x=(int)Toho.Marisa;魔理沙の番号は0だからこれでxには0が入ります。
逆に、数値をtoho型に直すときは
toho=(Toho)1; 霊夢の番号は1なので1を(Toho)すると、霊夢になります。
0とか1とか順番につくなんて嫌だ！自分で決めたいって人はこんな風にすればおｋ
 enum Toho{Marisa=3535, Reimu=0, Nitori=210, Chirno=9}
最後のコード
 using System;
 
 class EnumToho{
     public enum Toho{Marisa, Reimu, Nitori, Chirno};
     public Toho toho;
 }
 
 class Test13{
     public static void Main(){
         EnumToho et = new EnumToho();
         et.toho = EnumToho.Toho.Marisa;
         
         if(et.toho == EnumToho.Toho.Marisa)
             Console.WriteLine(&quot;やっぱり魔理沙！&quot;);
     }
 }

ifの上とifの括弧の中がちょっと新鮮な書き方ってだけ。列挙型おしまい。

*&amp;color(green){名前空間namespace}
でっかいプログラムを複数のファイルに分けたり
クラスを分類するときに役に立つ。
System.Drawing名前空間には描画に関するクラスが入ってるんだな
System.Windows.Forms名前空間にはWindowっぽいGUIプログラムに関するクラスが入ってるんだな
みたいに大量のクラスを名前空間で分類して使いやすくしてます。
あとは名前が重複しないとか。
たとえばTimerクラスはSystem.Threading名前空間
System.Timers名前空間とSystem.Web.UI名前空間とSystem.Windows.Forms名前空間の4つあります。それぞれのタイマーは違うものだけど名前空間が違うから区別できます。
では動画のコード
 using System;
 
 namespace CarTest{
     class Car{
         int gas;
         string number;
 
         public Car(int g, string n){
             gas = g;
             number = n;
         }
 
         public void Show(){
             Console.WriteLine(&quot;燃料 : &quot; + gas.ToString());
             Console.WriteLine(&quot;ナンバー : &quot; + number);
         }
     }
 
     class Test13{
         public static void Main(){
             Car car = new Car(9, &quot;3535-06&quot;);
             car.Show();
         }
     }
 }
これを複数のファイルに分割！
一個目
  using System;
  namespace CarTest{
     class Car{
         int gas;
         string number;
 
         public Car(int g, string n){
             gas = g;
             number = n;
         }
 
         public void Show(){
             Console.WriteLine(&quot;燃料 : &quot; + gas.ToString());
             Console.WriteLine(&quot;ナンバー : &quot; + number);
         }
     }
    }
二個目
    /* 
       直接System名前空間のクラスは使ってないので
       using System;は不要。あってもいいけど。
    */
    namespace CarTest{
     class Test13{
         public static void Main(){
             Car car = new Car(9, &quot;3535-06&quot;);
             car.Show();
         }
     }
    }
//Anonymous Coward: using CarTest;は説明しなくていいか

これを、コマンドプロンプトで
csc Test13.cs Car.cs
みたいにやればいい。簡単だね。
**&amp;color(green){using}
いままでusing System;
ってかいてきたね。だからConsole.WriteLineって書けた。
いちいちSystem.Console.WriteLineなんて書いてたら面倒だからね。
usingは名前空間にしか使えないから
using System.Console;
ってやってから途中でWriteLineはダメ。Consoleは名前空間じゃなくクラスだから省略できません。
あと、さっきのTimerみたいにたくさんの名前空間に同じクラスがあったら
usingで省略した名前空間のどのTimerなのか不明になるから
そんな場合はちゃんと書かないとダメ。
さらにusingはクラスに別名をつけられます。
using Marisa = System.Console;
って書いておけば
Marisa.WriteLine(&quot;魔理沙&quot;)はSystem.Console.WriteLine(&quot;魔理沙&quot;)と同じになります。長い名前のときにわかりやすい名前で省略すると便利。

*&amp;color(green){MSDNライブラリ}
-&amp;link2(MSDNライブラリ,http://msdn.microsoft.com/ja-jp/library/default.aspx,target=blank)
クラスライブラリを見るのは
&amp;color(red){.NET開発→.NET Framework 3.5→同じ→.NET Frameworkクラスライブラリ}
C#を良く使うなら、クラスライブラリを「お気に入り」とか「ブックマーク」に登録しておこう！
Consoleクラスを調べてみよう。System名前空間のConsoleクラスを調べるとか、検索ボックスにConsoleとか入力して検索すればでてくる。
これは、動画を見たほうが良いね。いう事なし！

*おまけ&amp;color(blue){Windowアプリケーション}
ほんの少しやってみよう。
 using System.Windows.Forms;
 
 class MainClass{
     static void Main(){
     Form frm = new Form();
     frm.Text = &quot;はじめてのWindowsアプリケーション！&quot;;
     frm.Click += (sender, e) =&gt; { MessageBox.Show(&quot;クリックされますた&quot;);};
     Application.Run(frm);
     }
 }
Click += の部分が見たことねー形ですが気にしないｗ
「イベント」ってやつです。
//Anonymous Coward:匿名メソッドやデリゲートすっ飛ばしていきなりラムダ式っすか(汗

これを保存して適当なファイル名.csにして
コマンドプロンプトで
csc /target:winexe ファイル名.cs (cscと/targetの間とwinexeとファイルの間は半角スペース)
でWindowsアプリケーションができる！
/targetはなくてもいいけど、コマンドプロンプトが起動してなんかダサイ。
できたexeを実行して、クリックしてみよう。
とりあえずこれで終了だけど&amp;color(red){二週間後に続編が来るらしい！}    </description>
    <dc:date>2009-12-12T01:32:03+09:00</dc:date>
    <utime>1260549123</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/cmatome/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[掲示板]]

C#まとめ
┣[[1_基本]]
┣[[2_ifとSwitch]]
┣[[3_演算子と文字列]]
┣[[4_for文while文]]
┣[[5_配列 コンソール]]
┣[[6_クラス]]
┣[[7_メソッド アクセス修飾子]]
┣[[8_オーバーロード コンストラクタ]]
┣[[9_プロパティ staticメンバ]]
┣[[10_継承 インターフェイス]]
┗[[11_列挙型 名前空間]]
----
[[メニュー]]


#search3(size=10)    </description>
    <dc:date>2009-12-07T18:15:26+09:00</dc:date>
    <utime>1260177326</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/13.html">
    <title>1_基本</title>
    <link>https://w.atwiki.jp/cmatome/pages/13.html</link>
    <description>
      ニコニコURL
http://www.nicovideo.jp/watch/sm8341470 

最初のドットネット フレームワークをインストールするってのは解説の必要ないでしょう。
動画どおりにやってくれればできるはず。

次のHello Worldについて。
 using System;
 
 class Test{
     public static void Main(){
         Console.WriteLine(&quot;Hello World&quot;);
     }
 }

TestとHello World以外の部分は&amp;color(red){大文字と小文字を間違えないようにしてください。}
たとえばMainをmainとか、WriteLineをWritelineってうったらコンパイルできません。めんどくせーとか思うかも知れんけど慣れると便利。
using SystemやHello Worldの後ろのセミコロン(;)とHello Worldをはさんでいるダブルクオート(&quot;)を忘れないでください。

//Anonymous Coward:下手に「初心者殺し？」って文言入っているの、正直言えばあまり好きではない。俺は厳格な言語が好きで、C#やJavaをVBAとかLLよりも上に見ていることが多いけれど、「必要以上に」怖がらせて、(そういうことに対する理解を入門者が嫌がって)一見簡単そうに見えるVBAやPHPに逃げて欲しくないんだ。(解った上で積極的に使っているならいいんだけど)

動画で「保存する際.csにしましょうtxtではダメ」って書いてるけど別に.txtでもできます。
コマンドプロンプトでcsc Test.txtと打ち込んでください。(コンパイルはできますが、ちょっと面倒なことがあるので.csを推奨します)


*補足情報
**MSDNのヘルプ
常時ネットにつないでる人用
http://msdn.microsoft.com/ja-jp/library/default.aspx

ネットにつないでないときもヘルプ見たい人向け
グーグルで
&gt;MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版）
を検索してください。
それらしきページでダウンロードするとヘルプファイルのisoが手に入るので
DVDに焼き付けるなり仮想ドライブにマウントするなりして通常のヘルプファイルにしてください。
(やりかたがわからないなら、iso 仮想ドライブでググる)
C#でプログラムする上で、ものすごい莫大な情報が載ってるめちゃくちゃ便利なヘルプファイルです。
最初のうちはヘルプに書いてあること自体にヘルプが必要だったりすることもありますがｗ
グーグルでc#　入門とか検索するのもオススメ。


//Anonymous Coward:http://msdn.microsoft.com/en-us/library/ms229335%28VS.100%29.aspx
//を直接ブラウザでユーザーに見に行ってもらったほうが早いんじゃないの？
//確かに、オフラインの時に利用できないとか欠点はあるけどさ。    </description>
    <dc:date>2009-12-07T08:53:21+09:00</dc:date>
    <utime>1260143601</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/cmatome/pages/1.html</link>
    <description>
      *C#
ニコニコ動画でc#の動画を作ってくれてる人がいたのでまとめてみた。
----
c#でプログラミングを始めよう！
魔理沙と霊夢がC#プログラミングを解説してくれます。
----
このウィキは、動画ではちょっと説明不足と思われる点や補足事項を説明します。
&amp;color(Red){このページは動画作者様とは無関係な第三者が勝手に作ったサイトです}
週一ペースで更新していきます。

動画を見てください。Vol11まであります。

#1 基本中の基本 Hello world
http://www.nicovideo.jp/watch/sm8341470
#2 変数、if文switch文
http://www.nicovideo.jp/watch/sm8399213
#3 演算子、文字列
http://www.nicovideo.jp/watch/sm8465683
#4 for文、while
http://www.nicovideo.jp/watch/sm8531180
#5 オーバーフロー、配列、コンソール
http://www.nicovideo.jp/watch/sm8602146
#6 クラス
http://www.nicovideo.jp/watch/sm8668205
#7 メソッド、アクセス修飾
http://www.nicovideo.jp/watch/sm8730292
#8 オーバーロード、コンストラクタ
http://www.nicovideo.jp/watch/sm8816959
#9 プロパティ、staticなメンバ
http://www.nicovideo.jp/watch/sm8873467
#10 継承、インターフェイス
http://www.nicovideo.jp/watch/sm8950128
#11 列挙、名前空間
http://www.nicovideo.jp/watch/sm9018860    </description>
    <dc:date>2009-12-07T08:41:45+09:00</dc:date>
    <utime>1260142905</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/23.html">
    <title>10_継承 インターフェイス</title>
    <link>https://w.atwiki.jp/cmatome/pages/23.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm8950128

もう少しでWindowsらしいプログラムが作れます。
がんばろう。
コンストラクタとかプロパティとかメソッドとか引数とかちゃんと覚えてないとこれからイミフになってきますよ。こういうのは復習が大事。

**&amp;color(green){継承}
 using System;
 class Vehicle{
     public int fuel,teiin;   //都合によりpublicにしています
 
     public void Show(){
         Console.WriteLine(&quot;fuel:&quot; + fuel + &quot; teiin:&quot; + teiin);
     }
 }
 
 class Car : Vehicle{    //CarはVehicleを継承してます
     string num;    //車のナンバー
 
     public Car(int f, int t, string n){//コンストラクタ
         fuel = f;    //継承により、fuelとteiinが使えます
         teiin = t;
         num=n;
     }
 
     public void NumShow(){
         Console.WriteLine(&quot;num:&quot; + num);
     }
 }
 
 class Test12{
     static void Main(){
         Car car = new Car(398, 9, &quot;3535-6&quot;);   //さくや、みこみこ
         car.Show();    //継承したので、Showが使えます。
         car.NumShow();
     }
 }

クラスの名前のあとに　:(コロン)をつけると継承ができます。
継承すると、public/&amp;color(red){protected}のメンバを全部うけつぎます。

protectedはpublicとprivateの中間のようなアクセス修飾子で
&amp;color(red){継承しているクラスからはアクセス可能でそれ以外からは不可能！}

同じようなクラスを大量に作ったとしましょう。
もし継承を使わなかったらいちいちコピペしなければならないかも。そうしたら、バグがあったりしたらコピペしたすべてのクラスに手を加えなきゃならないし不便です。でも継承したのなら基本クラスだけ手を加えればいいので楽です。いちいち宣言しなくても良いので入力の手間もかからないし。
動画では&amp;color(red){基本クラス、派生クラス}と呼んでますが
「親クラス、子クラス」「スーパークラス、サブクラス」「基底クラス、派生クラス」等と言うこともあります。
このWikiでは親、子を使います。
まぁどんな呼び方でも言いたいことはわかるでしょう。

また、コンストラクタについては、自動的に親クラスの引数なしの
コンストラクタを実行します。親クラスに引数なしのコンストラクタがなかったら、ちゃんとコンストラクタを設定しないとエラーになります。
 using System;
 class Oya{
     public Oya(){
         Console.WriteLine(&quot;親コンストラクタ呼び出し&quot;);
     }
 }
 class Ko : Oya{
     public Ko(){
         Console.WriteLine(&quot;子コンストラクタ呼び出し&quot;);
     }
 }
 class MainClass{
     static void Main(){
         Ko ko = new Ko();    //親コンストと子コンストの両方
     }                        //表示されます
 }

親クラスが複数のコンストラクタを持っていた場合
子のコンストラクタの後にbaseとつけるとできます。
 using System;
 class Oya{
     public Oya(int x){
         //なんか適当に書いてください
     }
     public Oya(string s){
         //なんか適当なのを書いてください
     }
 }
 class Ko : Oya{
     public Ko() : base(10){    //10はintなのでOya(int)を呼び出します
         Console.WriteLine(&quot;子コンストラクタ呼び出し&quot;);
     }
 }
 class MainClass{
     static void Main(){
         Ko ko = new Ko();    //baseで指定した親コンストと子コンストの両方
     }                        //表示されます
 }
コンストラクタやbase()の部分を変えて
いろいろやってみてください。


**&amp;color(greed){objectクラス}
C#には(.netFrameworkクラスライブラリには)objectクラスってのがあります。
これはすべての基底クラスです。つまりすべての型は何も継承しなくてもobjectクラスだけは勝手に引き継ぎます。(実はポインタ型というのが引き継がないが知らなくて良いです)
-&amp;link2(MSDNのページ,http://msdn.microsoft.com/ja-jp/library/system.object_members.aspx,target=blank)
たとえばobjectクラスはToStringメソッドがあります。このためどんな型だろうがToStringを持っています。

 using System;
 class MyClass    //一見何もないクラス
 {
 }
 
 class MainClass{
     static void Main(){
         MyClass mc = new MyClass();
         string s=mc.ToString();    //勝手にToStringが追加されてる
         Console.WriteLine(s);     //mcはMyClass
     }
 }

MyClass と表示されたと思います。ToStringは普通はクラス名を表示します。しかしオーバーライドを利用すればintやDateTimeのようにToStringを独自に設定することもできます。たとえば
 int x=10; x.ToString()← &quot;10&quot;
 DateTime dt =DateTime.Now; dt.ToString()←&quot;年/月/日 時間/分/秒&quot;

**&amp;color(green){ダメな継承例}
 class Oya : Ko{    //Koをひきつぐ
 public int x;
 }
 class Ko : Oya{    //さらにOyaをひきつぐ
 }
こんなのがダメなのは説明するまでもない。。。

 class A{
 }
 class B{
 }
 class C : A,B{    //C#ではクラスからの継承は一個だけです
 }                 //二つ継承しようとするとエラー

 class Oya{
     int x;
 }
 class Ko : Oya{
     Setx(){
         x=10;      //Oyaのxはprivateなのに注意
     }
 }

 class Oya{
     public Oya(string s){    //コンストラクタ
         Console.WriteLine(s);
     }
 }
 class Ko : Oya{
     public Ko(){    //baseを指定していないので勝手にOya()を呼び出そうとするけれど
         Console.WriteLine(&quot;子&quot;);     //Oya()は存在しないエラー
     }
 }

 class Oya{
 }
 class Ko : Oya {
     public void func(){
     //何かする
     }
 }
 //main部分
 Oya oya = new Oya();
 oya.func();     //子は親を継承してるが、親は子を継承していないのでfuncは無い

 class Oya{
     public void Show(){
     //何かの処理
     }
 }
 
 class Ko : Oya{
     public void Show(){    //Showメソッドの名前が重複しています
     //別の処理
     }
 }
これはエラーにはなりませんが、「同じ名前のメソッドもってるぞ！newキーワードつけれ」みたいな警告が出されます。
(警告ってのは実行不可能ではないがミスである可能性が高いような
危険なことです)

**&amp;color(green){new および overrideについて。}
今まではKo ko = new Ko();
みたいに&amp;color(red){クラスとコンストラクタが同じ}でした。
まったく異なる型を代入しようとすると(暗黙変換を除いて)エラーがでます。
ですが継承関係のクラスなら型が違っても大丈夫。
 Oya oya = new Ko();
もしくは
 Ko ko = new Ko();
 Oya oya = ko;
&amp;color(red){親クラスの変数は子クラスになれます}
逆に、Ko ko = new Oya();
のように、子クラスは親クラスになることはできません。
java知ってる人はこの辺のオーバーライド等
関して、C#とは機能がまったく違う部分があるので要注意。

new Ko()で作られたのはKoクラスのインスタンスです。
それをOya型の変数に突っ込んでます。
さてOya oya = ko;の後はoyaは型どうなってるか？
Oya型で宣言して、ko型のインスタンスを代入されている。。。
実はoyaはOya型でもあり、Ko型でもあります。
静的な型がOya、動的な型がKo、と言います。

 using System;
 class Oya{
     public void Show(){
     //何かの処理
     }
 }
 
 class Ko : Oya{
     public void Show(){
     //別の処理
     }
 }
 static void Main(){
     Oya oya = new Ko();
     oya.Show();      //OyaクラスのShowが呼ばれる
 }


何も書かなかったらOyaクラスのShowが実行されます。
でも警告「newをつけてください」って出てきます
KoクラスのShowに&amp;color(red){new}をつけてあげましょう。
 public new void Show();   //new publicでもどっちでもいいです。
こうすれば、oya.Show()はOyaクラスのShowを実行してくれます。
しかし、Oyaクラスのメソッドにvirtual、子クラスのメソッドに
overrideをつけるとoya.Show()がKoクラスのShow()を実行します。

 using System;
 class Oya{
     virtual public void Show(){    //public virtualもOK
     //何かの処理
     }
 }
 
 class Ko : Oya{
     override public void Show(){   //public overrideもOK
     //別の処理
     }
 }
 static void Main(){
     Oya oya = new Ko();     //oyaは動的な型がKoなのでKoクラスのShow()
     oya.Show();            //を実行します。
 }

newつけるのとoverrideつけるのは動作が逆になって紛らわしいですが
普通はバーチャル～オーバーライドのほうを使います。

継承は単に親クラスの持ってるものを引き継ぐという機能でなく
Oya oya = new Ko();みたいに型が異なった変数になることもできます。

**&amp;color(red){インターフェイス}
 using System;
 interface Itire{   //タイヤインターフェース、名前の最初にI
     void ShowTire();
     string Number {get;}    //プロパティも可能
 }
 
 class Car : Itire{
     string num;
     int tire = 4;
 
     public Car(String n){
         num = n;
     }
 
     public void ShowTire(){    //インターフェイスの実装
         Console.WriteLine(&quot;tireの数は&quot;+tire+&quot;です&quot;);
     }
 
     public string Number{    //プロパティも実装
         get{
             return num;
         }
     }
 }
 
 class Test12
 {
     static void Main()
     {
         Car car = new Car(&quot;3535-06&quot;);
         car.ShowTire();
         Console.WriteLine(&quot;ナンバー:&quot; + car.Number);
     }
 }

インターフェイスの名前には&amp;color(red){最初に大文字のI(アイ)}をつけるのがスタンダードです。メソッドとプロパティ(やってませんがインデクサ、イベントも)をメンバにできますがフィールド(変数)は無理。
Javaとは違います。さらに勝手にpublicになります。だから実装側でもpublicにしないといけません。

&amp;color(red){ダメなインターフェイスの例}
 interface Interface1{
     int x;    //ただの変数は×(プロパティOK)
     private void func();    //勝手にpublicになるのでprivate×
     public void func2();    //勝手にpubになるので二重宣言になる×
     void func3(){           //インターフェイスの中でメソッドとか定義するのは×
     //処理
     }
 }
インターフェイスは通常クラスの継承と違って多重に実装可能です。
複数実装するときはコンマで区切ります
 class MyClass : Interface1, Interface2  //こんな書き方をします
インターフェイスはインスタンスを作成できません(newできません)が
変数を宣言することはできます。
Interface1 sample;    //OK
Interface1 sample = new Interface1();    //NG

overrideでやったのとまったく同じように、インターフェイスも子クラスを代入できます
 using System;
 interface IMyInterface{
     void Show();
 }
 
 class Implement1 : IMyInterface{    //Implementは実装
     public void Show(){
         Console.WriteLine(&quot;実装１です&quot;);
     }
 }
 
 class Implement2 : IMyInterface{
     public void Show(){
         Console.WriteLine(&quot;実装２です&quot;);
     }
 }
 
 class MainClass{
     static void Main(){
         IMyInterface mi = new Implement1();    //miの型に注意
         mi.Show();    //miはImplement1なのでImplement1のShow
         mi = new Implement2();
         mi.Show();    //こっちはImplement2のShow
     }
 }


&amp;color(red){インターフェイスってどんな時に使うのか}
たとえばですが
string型とint型はIcomparable(T)インターフェイスを実装してます。
-&amp;link2(Icomparable,http://msdn.microsoft.com/ja-jp/library/1dsfk1za.aspx,target=blank)
-&amp;link2(int32.CompareTo,http://msdn.microsoft.com/ja-jp/library/y2ky8xsk.aspx,target=blank)
-&amp;link2(string.CompareTo,http://msdn.microsoft.com/ja-jp/library/35f0x18w.aspx,target=blank)
int32のほうとstringのほうのページで小さく
実装
IComparable&lt;(Of &lt;(T&gt;)&gt;).CompareTo(T)
と書いてるのがわかります。
(T)ってのはあまり関係ないので飛ばしますが「比較可能」であるインターフェースです。intは2と4は4のほうが大きいとかすぐわかりますが、文字で比較ってのは、辞書順にならべて比較します。
abcdeとzyならzyのほうが大きいです(辞書は、aのほうが最初)
この「辞書順に比較する」「数値が大きいほうを比較する」ってのはまったく異なった方法ですけどComperToって同じ名前で実装してます。
(T)ってのはジェネリックという機能です。でもここでは説明しません。

&amp;color(blue){最後に関係ない話}
Visual Studioの便利な使い方。
Visual Studioは大変便利な機能があります。
ちょっとだけ紹介します。

ブックマーク
コードの行に「ブックマーク」を設定すると、ショートカットキーで
その行に飛べます。CTRLキー+B、Tで設定ができます。
ブックマークに設定した行にはCTRL+B、P or Nで移動できます。
もちろん、キーボードの設定を変えていなければですが。
キーボードの設定は、メニュー(ファイルとか編集とか表示とかある一番上のやつ)のツール→オプション→環境→キーボード
で、「以下の文字列を～～表示」ってのでブックマークなどと入力したら出てきます。

インデントが汚れたコードの掃除
http://www21.atwiki.jp/cmatome?cmd=upload&amp;act=open&amp;pageid=23&amp;file=Visual+Stdio.jpg
これはわざとインデント(空白)をずらしまくってますが
コピーペーストとかしまくるとたまにずれてきます。
こんなときは
&amp;color(red){CTRL+Aで全選択、CTRL+Xで切り取り、CTRL+Vで貼り付け}
をしてやるとすべてきれいになります。

テンプレート
一番最初に書かれるやつ。
C#のコード作るときいちいち
using System;だのMainだの書いてたら超面倒なので
最初のコードをテンプレートとして設定できます。
デフォルトに入ってるWindows フォームとかでもいいですが
自分専用のテンプレートを作るには
メニューのファイル→テンプレートのエクスポート
でできます。

ショートカットキー
CTRL+Sで上書き保存、CTRL+Aで全選択
みたいなやつ。覚えておくと便利なので使えそうなのを覚えよう。
Visual StudioだとCTRL+Xキーが
&amp;color(blue){何も選択していないときは行まるごと切り取り}
してくれるので超便利です。
http://msdn.microsoft.com/ja-jp/vstudio/dd183140.aspx

他にも便利な機能がいっぱいあるんで利用しよう。    </description>
    <dc:date>2009-11-30T20:56:59+09:00</dc:date>
    <utime>1259582219</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/20.html">
    <title>7_メソッド アクセス修飾子</title>
    <link>https://w.atwiki.jp/cmatome/pages/20.html</link>
    <description>
      *&amp;color(green){メソッド　アクセス修飾子}
ニコニコ動画
http://www.nicovideo.jp/watch/sm8730292

**&amp;color(green){引数}
最初の前回と同じプログラムは省略。
次のsetTateYokoのプログラムを書きます

 using System;
 
 class Rectangle{
     public int tate;
     public int yoko;
 
     public void show(){
         Console.WriteLine(&quot;tate:&quot; + tate.ToString() + &quot; yoko:&quot; + yoko.ToString());
     }
 
     public void setTateYoko(int t, int y){
         tate=t;
         yoko=y;
     }
 }
 
 class Test09{
     public static void Main(){
         Rectangle ra = new Rectangle();
         ra.setTateYoko(30,100);
         ra.show();
     }
 }

void setTateYoko(int t, int y)はtとyという二つの引数でtateとyokoをセットします。
Mainの中でsetTateYoko(30,100)ってやってセットしてます。

&amp;big(){&amp;color(red){void}}がついていることに気をつけてください。voidは戻り値がないメソッドのことです。

**&amp;color(green){戻り値}

 using System;
 
 class Rectangle{
     public int tate;
     public int yoko;
 
     public void setTateYoko(int t, int y){
         tate=t;
         yoko=y;
     }
 
     public int getArea(){    //メソッドの前にintがついています
         int a=tate*yoko;    //動画ではaですが長いプログラムaだと不明瞭なのでMenseki等の名前のほうがわかりやすい
         return a;        //return で戻ってくる変数の型とメソッドの型は一致しないとダメ(この場合はint)
     }
 }
 
 class Test09{
     public static void Main(){
         Rectangle ra = new Rectangle();
         ra.setTateYoko(30,100);
         int area=ra.getArea();
         Console.WriteLine(&quot;面積は: &quot;+ area.ToString());
     }
 }

getArea()の、&amp;color(red){何もないカッコ}を忘れないでください。
忘れたらコンパイルできません。
何もないなら()ってなんかダサイしわざわざ書かなくていいんじゃね？とか思っても、変数と紛らわしいので
絶対に()をつけてください。何もない()をわざわざつける事で変数ではなくメソッドであることがわかります。

もちろん、戻り値はint以外もできます。宿題のヒントになっちまいますが・・・stringを戻らせる方法
 using System;
 
 class MojiTest{
     public string aiueo(){
         return &quot;あいうえお&quot;;
     }
 }
 
 class MainClass{
     static void Main(){
         MojiTest a = new MojiTest();
         string s = a.aiueo();
         Console.WriteLine(s);
     }
 }
aiueo()であいうえおという文字列がreturnされてsに入ります。


あまり関係ない話ですが、動画のプログラムではgetAreaとかsetTateYokoとか、最初は小文字で次から始まる単語が大文字ですよね。
こういうのを、camel記法といいます。(camel=ラクダ、ラクダのこぶみたいにデコボコな書き方)
C#では基本的に単語は全部大文字で始めるので(例 OnClickやSetStyle)
最初が小文字だと紛らわしいし、C#は大文字と小文字を区別してコンパイルできなくなるのでミスのもとになるので名前のつけたは一貫性を持つようにしよう！
//Anonymous Coward:ちなみにC#のような書き方をPascal記法と言います。
//camel記法の書き方の問題と言うわけでもないな。Pascal記法の言語でcamel記法を使い出しても同じなので。まぁ「他の人と一貫性を持つようにしておいたほうが読みやすいよ。」っていう提言と思っておこう。MSによる各々の識別子(変数とかクラスの名前とか)をどちらの記法で書くべきか、ってのは
//http://msdn.microsoft.com/en-us/library/ms229045.aspx

**&amp;color(green){アクセス修飾子}
いまのところ&amp;big(){&amp;color(red){publicとprivate}}だけ覚えておけばおｋ。
publicはどこからでも使えますがprivateは同じクラス内でしか使うことはできません。
publicは比較的わかりやすいと思うのでprivateだけ。

動画の最初のプログラムは前と同じなので省略。
 using System;
 
 class Rectangle{
     int tate;    //publicもprivateもついていないなら、privateだとみなされます
     int yoko;
 
     public void setTateYoko(int t,int y){
         tate=t;          //tateとyokoはprivateなので別のクラスからはアクセスできないが
         yoko=y;          //同じクラス(Rectangle)からはアクセス可能！setTateYokoを利用し間接的に代入しています。
     }
 
     public int getArea(){
         return tate*yoko;    //さっきのプログラムと違ってint aを使わず直接returnしてます
     }
 }
 
 class Test09{
     static void Main(){
         Rectangle ra = new Rectangle();
         ra.setTateYoko(30,100);
         int area = ra.getArea();
         Console.WriteLine(&quot;面積: &quot;+ area);
     }
 }

&amp;big(){&amp;color(red){同じクラス内ならアクセスできる}}ということを覚えておいてください。

**&amp;color(green){補足、文字列表現と時刻}
今回とほとんど関係ないけど覚えておくといいことを説明します。
いままでは
 Console.WriteLine(&quot;たては&quot; + tate.ToString() + &quot;です。よこは&quot; + yoko.ToString() + &quot;です。&quot;);
みたいな表現方法でやってました。この方法だと、&quot;と&quot;の間がどこなのかかなりわかりづらいです。
この程度の短いのならいいですがもっとわかりやすい表現方法にしてみましょう。
 int tate=30, yoko=100;
 Console.WriteLine(&quot;たては{0}です。よこは{1}です&quot;, tate, yoko);
これを実行すると、「たては30です。よこは100です」と表示されます。
Console.WriteLineに「&amp;color(red){三つの引数}」があることがわかりますか？
最初の引数は&quot;たては{0}よこは{1}です&quot;ってやつで、第二の引数がtate,第三の引数がyoko。
じつは最初の引数に{0}って書くとそこに第二の引数が文字として表示されます。同様に、{1}って書くと第三引数が表示されます。
いちいち+tate+とか&quot;と&quot;で区切られてるより、こっちのほうが読みやすいです(俺は)
//Anonymous Coward:では問題2つ。
//Q1.System.Console.WriteLine(&quot;abc{0}&quot; + tate.ToString());と同じ出力を得るには第一引数をどう指定したらよいでしょう？
//Q2.Console.WriteLine(&quot;たては{0}です。よこは{1}です&quot;, tate, yoko);はどのオーバーロードを使っているでしょう？object型にintを突っ込めることの説明はどこで行う？
さらにこの{0}ってやつは特殊な方法で文章を表示してくれます。
一例として、現在時刻を表示させましょう。知っとくと便利だと思うので現在時刻を表示させる方法を覚えよう！(時刻表示なんかしねーよって人は読み飛ばそう)
 using System;
 
 class ClassMain{
     static void Main(){
         DateTime dt = new DateTime();  //DateTimeは「時間」の型、DateTime.Nowで「現在時刻」を取得 dtは別の名前でも可能
         dt=DateTime.Now;            //この二行は、DateTime d = DateTime.Now ってやってもおｋです。Nowはメソッドではないので()つけないことに注意
     Console.WriteLine(&quot;{0:yyyy/MM/dd hh/mm/ss.fff}&quot;,dt);
     }
 }

{0}ではなく0のあとになんかヤバイのがついてます。{0}の0の後に&amp;color(red){コロン(:)}をつけることにより、特殊表示が可能です。
{0:yyyy/MM/dd hh/mm/ss.fff}について説明
これらのyyyyは今の年(year)、MMは月(month)、ddは日(day)、hhは時間(hour)、mmは分(minute)、ssは秒(second)、fffはミリ秒(fraction)
をあらわします。MonthとMinuteの頭文字が同じなので大文字と小文字で区別してます。
これらを組み合わせると(&quot;{0:今日はMM月dd日です}&quot;,dt)とか(&quot;{0:今はhh時mm分です}&quot;,dt)
みたいないろいろな表現が可能です。もっといろいろ表現方法(曜日とか)あるけど、これ以上知りたいならC# DateTimeとかで[[ググる&gt;http://msdn.microsoft.com/en-us/library/txafckwd.aspx]]。

//Anonymous Coward:fewじゃなくてfractionのような気がするけどそれはきっと気のせい。
//http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#fffSpecifier
//http://ja.wiktionary.org/wiki/fraction
//http://ja.wiktionary.org/wiki/decimal_fraction    </description>
    <dc:date>2009-11-23T19:02:54+09:00</dc:date>
    <utime>1258970574</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/22.html">
    <title>9_プロパティ staticメンバ</title>
    <link>https://w.atwiki.jp/cmatome/pages/22.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm8873467

*&amp;color(green){プロパティ}
 using System;
 
 class Rectangle{
     int tate,yoko;
 
     public Rectangle(int t,int y){    //コンストラクタ
         tate = t;
         yoko = y;
     }
 
     public int Tate{    //プロパティの名前は大文字から
         get{
             return tate;
         }
         set{
             if(value &gt; 0){    //0以下の値は拒否
                 tate = value;
             }
         }
     }
 
     public void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate.ToString() + &quot; yoko:&quot; + yoko.ToString());
     }
 }
 
 class MainClass{     //メインクラス開始
     static void Main(){
         Rectangle ra = new Rectangle(2,7);
         ra.Tate = 6;    //setのほうを呼ぶ。valueには6がセットされます。
         Console.WriteLine(&quot;tate:&quot; + ra.Tate.ToString());  //getのほうを呼ぶ。
     }
 }

プロパティの部分は&amp;color(red){public int Tate}の部分です。
今までだと
RectangleクラスにgetTate(int t);をつくり
MainクラスでgetTate(6);
みたいにしてセットしてたけど
ra.Tate=6;のほうが直感的に操作できるし便利です。
&amp;color(red){valueが0より多くないとセットされない}ことに注目してください。
こうすれば
 ra.Tate=-100
みたいな変な値を拒否できます。安全です。
でもこのまま何も言わず拒否するだけじゃあんまりなので
0以上を入力してください！とか表示しましょう！
//Anonymous Coward:今は良いけど、いつか例外処理を勧める話に持って行ってくださいね。
&amp;color(red){プロパティが = の左側にあったらsetが呼ばれる}
&amp;color(red){そうじゃないときgetが呼ばれる}
ことに注意しよう。
あと、必ずこうしなきゃダメってことじゃないですが
プロパティ名は&amp;color(red){最初が大文字}なのがスタンダード。
 public int tate{
     get;set;
 }
みたいに[[最初小文字使うのはやめよう&gt;http://msdn.microsoft.com/ja-jp/library/ms229043.aspx]]

もうちょっと応用（？）してみましょう。
単位が違うけど同じ内容みたいなのをやってみよう
(1メートルと1000ミリメートルとか、60秒と1分は同じとか)
//Anonymous Coward:早い段階で命名規則を「省略しない」ものにした方がいいのかなあ
 using System;
 
 class Nagasa{
     double mm;
 
     public double MM{     //ミリメートル
         get{
             return mm;
         }
         set{
             if(value&lt;0.0){
                 Console.WriteLine(&quot;0以上を入力してください&quot;);
             }else{
                 mm=value;
             }
         }
     }
 
     public double M{    //メートル
         get{
             return mm/1000.0;    //1メートル=1000ミリ
         }
         set{
             if(value&lt;0.0){
                 Console.WriteLine(&quot;0以上を入力してください&quot;);
             }else{
                 mm=value*1000.0;
             }
         }
     }
 }
 
 class MainClass{
     static void Main(){
 
         Nagasa na = new Nagasa { M = 2.0 };    //前回やった書き方です。
         Console.WriteLine(&quot;メートル:{0} ミリメートル:{1}&quot;,na.M, na.MM);
         na.MM = 2048.0;
         Console.WriteLine(&quot;メートル:{0} ミリメートル:{1}&quot;,na.M, na.MM);
         na.M=-100.0;   //マイナスを入れてみます
         Console.WriteLine(&quot;メートル:{0} ミリメートル:{1}&quot;,na.M, na.MM);
     }
 }

メートルに2をいれたらミリメートルが2000に
ミリメートルに2048を入れたらメートルが2.048になったと思います。
内部はdouble mmだけしかないのに二つの変数を持ってるみたいにできます。

次は&amp;color(red){読み込みだけ}ってのをやってみましょう。

 using System;
 class Test{
     public int Zero{
         get{ return 0;}
     }
 }
 
 class MainClass{
     static void Main(){
         Test t = new Test();
         //t.Zero=100;とやるとエラーが出ます
         //エラー	プロパティ(略)は読み取り専用
         Console.WriteLine(&quot;{0}&quot;,t.Zero);
     }
 }
こんな風にgetだけにすると読み込みだけしかできなくなります。

*&amp;color(green){staticメンバ}
インスタンス変数とかインスタンスメソッドってのはnewしないと使えない変数です。
これはいいでしょう。
ちなみにメンバってのは変数とかプロパティとかメソッドとか
コンストラクタなどのクラスの中に入ってるデータたちです
メンバにstaticをつけるとnewしないでも使えます。
以前[[6_クラス]]のラストでちょっとだけ書いてたけど
Console.WriteLineとかいままでnewしなかったでしょ。
あれはWriteLineがConsoleクラスのstaticメソッドだったから。
Consoleクラスのページを見てみましょう。
↓をクリック。
**&amp;blanklink(MSDNのConsoleメンバページ ){http://msdn.microsoft.com/ja-jp/library/system.console_members%28VS.80%29.aspx}
Consoleメンバっていうページで
パブリックプロパティって書いてて
表の左の欄のほとんどに
Ｓって書いてるマークあるでしょ。これがStaticなプロパティや
メソッドであるというマークです。
Console.WriteLineにもＳがついています。newしなくても使えるってことです。

せっかくだしちょっと一番最初にあるBackgroundColorプロパティ使ってみよう。
間違いやすいかもしれないけどBackGroundColorじゃないよ。groundだよ。
     using System;
     class MainClass
     {
         static void Main()
         {
             Console.BackgroundColor = ConsoleColor.Blue;    //Blueに設定
             Console.WriteLine(&quot;背景が青いです&quot;);
         }
     }

こういったの利用してMSDOSやコマンドプロンプトで絵描いてる人もいるらしい・・・

さて動画のプログラム
 using System;
 
 class Rectangle{
     public static int tate;    //static publicでもいいです。
     public static int yoko;
 
     public Rectangle(int t, int y){
         tate = t;
         yoko = y;
     }
 
     public void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate.ToString() + &quot; yoko:&quot; + yoko.ToString());
     }
 }
 
 class MainClass{
     static void Main(){    //もちろんここにもstatic
         Rectangle ra1 = new Rectangle(2,7);
         Rectangle ra2 = new Rectangle(5,9);
 
         Rectangle.tate=10;
         Rectangle.yoko=30;
 
         ra1.Show();
         ra2.Show();
     }
 }

staticなのでnewしないでもtateとyokoが使えます。
普通、staticな変数ってのは[[数学のπ(円周率)&gt;http://msdn.microsoft.com/ja-jp/library/system.math.pi.aspx]]
とかe(指数対数でやるネイピア数)
みたいな定数を読み取り専用(constなど)にして使ったり
//Anonymous Coward:一例としてはありかな。一応ネイピア数はフィールドに無いような気がする。Exp関数はあるけど。
ほとんどクラスから独立してnewする意味がなさそうなメソッド
([[Console.WriteLine&gt;http://msdn.microsoft.com/en-us/library/system.console.writeline%28VS.100%29.aspx]]とか、[[sin関数&gt;http://msdn.microsoft.com/en-us/library/system.math.sin%28VS.100%29.aspx]]とか[[log関数&gt;http://msdn.microsoft.com/en-us/library/system.math.log%28VS.100%29.aspx]]とか)
に使います。
最初のうちはstaticはどんな時に使うのかよくわからんと思うけど
とりあえず&amp;color(red){newしなくても使える}
とだけ覚えとけばいい。


 using System;
 
 class Rectangle{
     public static int tate;
     public static int yoko;
 
     public Rectangle(int t, int y){
         tate = t;
         yoko = y;
     }
 
     public static void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate + &quot; yoko:&quot; + yoko);
     }
 }
 
 class MainClass{
     static void Main(){
 
         Rectangle.tate=10;
         Rectangle.yoko=30;
 
         Rectangle.Show();
     }
 }

*&amp;color(blue){今回の内容とは関係ない話}
**型キャスト
今まで特に型は意識してませんでした。
特にdoubleとかintとか。
あまり意識しないで代入しまくるとどうなるか
ちょっと試してみましょう。
 using System;
 class Test{
     static void Main(){
         int i=1; double d=5.3;
         d=i;          //int型をdouble型に入れてます
         Console.WriteLine(&quot;{0}&quot;,d);
     }
 }

ちゃんと、「１」という表示が出ます。
じゃ逆

 using System;
 class Test{
     static void Main(){
         int i=1; double d=5.3;
         i=d;          //さっきと逆
         Console.WriteLine(&quot;{0}&quot;,i);
     }
 }
doubleをintに暗黙的に変換できません
とかいわれて実行できないはずです。
こういう風に、型の違うものを何も書かず=でつなぐことを
&amp;color(blue){暗黙変換}といいます。
暗黙変換はなるべく避けたほうがいいです。
i=dはできるのにd=iは無理とかわかりづらいしょ。
今はint型とdouble型しかやってないけど
実はもっとたくさん数値の型があっていちいち
暗黙変換がどうとかいわれてエラーになったらうざいから
面倒でもできる限りちゃんとはっきり「int型に変換します」って宣言しましょう。
 using System;
 class Test{
     static void Main(){
         int i=1; double d=5.3;
         i=(int)d;          //dをはっきりとint型に変換してる
         Console.WriteLine(&quot;{0}&quot;,i);
     }
 }
(int)をつけると、その数字をint型にキャスト(変換)できます。
この際、double型を整数になおすと小数以下切捨てです。負の数も同じ。
四捨五入とか変なこと考えずとりあえず切り捨て！
例 (int)4.9→4、(int)-10.8→-10
//Anonymous Coward:キャスト失敗すると思っていた人間がここに一人
//C#にDirectCastみたいなのはないのだろうか？
//http://blogs.wankuma.com/jeanne/archive/2005/03/18/12271.aspx
//そうでないと、 int.Parse((4.9).ToString())みたいなことやるときに例外が投げられないよね？
//as演算子は参照型のみらしいし…
//返信：
//C#にはDirectCastみたいなのはなさそうだね
今のところは、double→intにする際は(int)をつけなきゃいけないことだけ
覚えててください。
あとは型を変換する機能をもったクラスとして
Convertクラスがあります。
もちろんこんなの使う際にnewすると不便なのでstaticです。
&amp;blanklink(MSDNのConvertメンバページ){http://msdn.microsoft.com/ja-jp/library/system.convert_members%28VS.80%29.aspx}
パブリックメソッドのToInt32を見てください
int型は正式名称（別名？）がInt32なのでToInt32って書いてます
オーバーロードの一覧で、いろいろな型(特に数字に関係しそうなもの)
がオーバーロードされてます。
Convertクラスを使うのは(int)ってつけるのとほとんど変わらないですが
四捨五入されたり微妙に違うので覚えておくと役に立つかも。
 using System;
 class Test
 {
     static void Main()
     {
         int x=5; double y=10.6;
         x = Convert.ToInt32(y);
         Console.WriteLine(&quot;{0}&quot;, x);   //(int)と違って10.6→11
     }
 }

//なんか編集更新がかぶったみたいで消えちゃったかな
//Anonymous Coward:すまん。    </description>
    <dc:date>2009-11-23T18:47:42+09:00</dc:date>
    <utime>1258969662</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/21.html">
    <title>8_オーバーロード コンストラクタ</title>
    <link>https://w.atwiki.jp/cmatome/pages/21.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm8816959

最初の前回の答えってのは飛ばしますがひとつだけ

 Console.WriteLine( Show() )
みたいな書き方を覚えてください。
Show()はstring型をreturnするのでこのような書き方ができます
(たとえばShowがvoidだとこの書き方はできません)

*&amp;color(green){メソッドのオーバーロード}
では次の長いプログラムを見ましょう。
ずっとRectangleクラスばっかりで飽きてきそうですが我慢！

 using System;
 
 class Rectangle{
     int tate,yoko; //変数は連続に書くことができます。
     
     public void setTateYoko(int t,int y){   //voidです。
         tate=t;
         yoko=y;
     }
 
     public void setTateYoko(){    //引数がありません。
         tate=10;    //setTateYoko(10,10)とまったく同じことです
         yoko=10;    //tate=yoko=10;でもかまいません。
     }
 
     public void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate.ToString() +&quot; yoko:&quot; + yoko.ToString());
     }
 }
 
 class Test10{
     public static void Main(){
         Rectangle ra = new Rectangle();
         ra.setTateYoko();
         ra.Show();
     }
 }

&amp;color(red){引数が異なると、同じ名前のメソッドが複数作れます。}
ここでは引数にintを二つとったsetTateYoko、引数なしのsetTateYokoがあります。
こういう風にすることを&amp;color(red){オーバーロード}といいます。
今は関係ないですがそのうち「オーバーライド」とかいう用語がでてきて
なんか名前が似ていて紛らわしいのでちゃんと覚えてください。

では次のコード

 using System;
 
 class Rectangle{
     double tate,yoko; //前と違ってdoubleにしてみました
     
     public void setTateYoko(int t,int y){   //
         tate=t;     //int型をdouble型にぶちこんでます。
         yoko=y;     
     }
 
     public void setTateYoko(double t,double y){//前は引数int、これはdouble
         tate=t;
         yoko=y;    //上とまったく同じ処理をしています
     }
 
     public void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate +&quot; yoko:&quot; + yoko);
     }
 }
 
 class Test10{
     public static void Main(){
         Rectangle ra = new Rectangle();
         ra.setTateYoko(10.3,100.4);//10.3と100.4はdouble
         ra.Show();
     }
 }

よくみると、オーバーロードしたsetTateYokoはメソッドの中身は一緒で
引数の種類だけ違います(int,double)。今回みたいなのは二個しかないけど
引数が違うだけで同じような処理をするメソッドが大量にあると
型によるエラーも増えたりして管理面倒です。
実はいっぱい作らなくても良い方法がいくつかあるのですが今の知識だけじゃ
まだ難しくて無理なのであきらめて書いてね。

オーバーロードは引数の型や数が異なるときです。
引数が異なるってのは「名前が違う」のではなく
&amp;color(red){型が異なる}ということです。
つまりこれはダメ！
 void setTateYoko(int x,int y)
 void setTateYoko(int a,int b)
どちらも引数は違う(名前だけが)けど両方int型なので当然エラーです。

メソッドの戻り値の型だけが異なるだけではダメってのはいいでしょう。
最後にオーバーロードは便利だけど、わかりやすさ重視でかいてね。
意味不明に乱雑に同じ名前にすると何をするかわからないメソッドに
なっちまいます。
極力、同じ名前では似た処理をさせましょう。
戻り値の型を変えるのは混乱の原因になりかねないので注意！

*&amp;color(green){コンストラクタ}
newしたときに自動で呼ばれるメソッド。
初期設定をしたいときに使おう！

 using System;
 
 class Rectangle{
     int tate,yoko;
     
     public Rectangle(int t,int y){   //クラス名前と同じコンストラクタ
         tate=t;
         yoko=y;
     }
     public void Show(){
         Console.WriteLine(&quot;tate:&quot; + tate +&quot; yoko:&quot; + yoko);
     }
 }
 
 class Test10{
     public static void Main(){
         Rectangle ra = new Rectangle(30,100);  //コンストラクタで代入
         ra.Show();
     }
 }

初期化方法はもっとあります。
 Rectangle ra=new Rectangle{tate=30,yoko=100};
とやると、自動的にRectangle()が呼ばれtateに30、yokoに100が入ります。
もっとも、↑のコードはtateとyokoがprivateだし
引数なしコンストラクタがないのでこの初期化方法は無理だけど。
Rectangleの後ろが( )じゃなく{ }なことだけ注意。

Object and Collection Initializers
http://msdn.microsoft.com/en-us/library/ms364047%28VS.80%29.aspx#cs3spec_topic5

**&amp;color(green){privateの利点}
tateとyokoはprivateで、コンストラクタを利用して入れてます。
直接tate=10;yoko=20;とかやらないで
なぜ間接的な方法をとるのか？
たとえばクラスにMonth(月)とかとかage(年齢)
等のデータがあったとしましょう。
この際、Month = 13;とかMonth = -5;とかage = -136
みたいにされると厄介です。
月は1～12、年齢は正の数なのが前提だから。
想定外の値を直接入られると困る。。
「変な値」は拒否したいわけです。
そこでprivateなMonthとは別に間接的なやりかたで代入すると
たとえばこんな感じ

 private Month;
 public SetMonth(int month){
     if (month&lt;1){
         Month = 1;
     }
 }
これでSetMonth(-100)とかやられてもMonthに-100は入らず
1が入ります。
これは一例でもっとたくさんの利点があります。

*&amp;color(green){コンストラクタのオーバーロード}
コンストラクタもオーバーロード可能です。
&amp;color(blue){その際、thisという単語で別のコンストラクタを呼び出せます。}
これ動画でやってなかったし、自分で使うことはあまりないだろうけど
たまに使われているから
thisって書いてれば別のコンストラクタ実行可能とだけ覚えとけばいいです。

 using System;
 class Test{
     public Test()
     {
         Console.WriteLine(&quot;thisで呼ばれました&quot;);
     }
     public Test(string s) : this()     //←ここにthis()があります。
     {
         Console.WriteLine( s );
     }
 }
 class MainClass{
     static void Main(){
     Test t = new Test(&quot;まりさ&quot;);    //thisでTest()まで呼ばれてしまいます
     }
 }

//Anonymous Coward:System.Console.WriteLine(String)やSystem.Console.WriteLine(int)もオーバーロードだし、
//同じ演算子に複数の型を与えられるのも、オーバーロードの力である、ってこと、そろそろ説明できるかもしれない

*&amp;color(blue){今回の内容とは関係ない話}
たぶん多くの人は無料のVC2008を使ってると思うけど
&amp;color(red){Visual Studio 2010 βバージョン}をダウンロードしてつかってみよう。
ベータバージョンなので無料です。
-&amp;link2(VisualStudio2010のページ,http://www.microsoft.com/japan/visualstudio/products/2010/default.mspx,target=blank)
今すぐベータをダウンロード→WEBダウンロード
Visual Stdio 2010 Ultimateの日本語バージョンをDL
メールアドレスなどを登録すれば(しなくても可能かも)すぐ実行可能。    </description>
    <dc:date>2009-11-23T05:49:43+09:00</dc:date>
    <utime>1258922983</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/14.html">
    <title>2_ifとSwitch</title>
    <link>https://w.atwiki.jp/cmatome/pages/14.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm8399213

***Visual Studioについて
Visual StudioはC#を作りやすくするための開発環境です。
開発環境はほかには&amp;link2(Eclipse,http://www.eclipse.org/downloads/)などがあるらしいですが使ったことないので知りません・・・

開発環境とは、プログラムを作るのに便利なツール。
メモ帳だと

using System;

class test{
(Mainの部分)
Consloe.WriteLine(&quot;あいうえお&quot;);
}

これらは全部文字の色が真っ黒・・・。
Visual Studioを使うと
usingやclass(予約語とか言います)が青色の文字で表示されて、見やすいです。
何か文字を間違って入力しちゃった場合(Consle.Writelineみたいに)、その部分に赤い線が引かれ「文字間違ってますよ！」って教えてくれたり
ただ黒い文字しか表示されないメモ帳よりいいこといっぱいしてくれて使いやすいです。
http://www21.atwiki.jp/cmatome?cmd=upload&amp;act=open&amp;pageid=14&amp;file=%E7%84%A1%E9%A1%8C.jpg
なんか文字の色変わってたり行数が表示されてます。
でもしばらくはメモ帳でがんばろう！

*変数
数値を入れる箱です。
intは-2147483648～2147483647の整数
doubleはかなり大きな数からかなり小さな小数(±1.7*10^308±5*10^-308)程度まで可能です。
科学技術でもやるんじゃなきゃこんな数値こえることはまずないので「doubleはとにかくすごい」って覚えとけばおｋ。
参考URL
http://www.algolab.co.jp/~lum/pcnyumon/nyu032.htm
http://pc.nikkeibp.co.jp/pc21/special/gosa/
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml


//Anonymous Coward:俺のミスなのでURI修正

 using System;
 
 class Test2{
     public static void Main(){
         int i=398;
         Console.WriteLine(i);
     }
 }

動画のほうではint iとi=398が別でしたが合体させました。
また、&amp;color(red){変数はまとめて宣言}することができます。
 int a,b,c,d;   //aとbとcとdの4つの変数を作った
 int a=100,b=200,c=250,d=1000;   //a、ｂ、ｃ、ｄ4つつくり、それぞれ100,200,250,1000を入れた。
これ、知っておくとちょっと便利だけど動画に書いてなかったので補足。

右クリックで「編集」がないですね。プログラムから開く→ワードパットとかやってください。
拡張子をある知ってる程度ひとは、csをメモ帳に関連付けしてもおｋ。

*if文
もし～～ならってやつ。もしxが10以上なら～とか。
ifのあとの()にはTrue/False(ホント/ウソ)が入ります。
if文でつかうときに&amp;color(red){=と==を間違えやすい}です！気をつけてください
//Anonymous Coward: リテラルに合わせてtrueとかfalseとか小文字にすべきだろうか？文字列にすると&quot;True&quot;とか&quot;False&quot;になるけれども。

 using System;
 
 class Test3{
     public static void Main(){
         int marisa=100;
         if(marisa==100){
             Console.WriteLine(&quot;魔理沙&quot;);
         }
     }
 }

変数名は英文字じゃなくて日本語も使えます！Mainの中は
 int まりさ=100;
 if(まりさ==100)
でもおｋ

**&amp;color(Blue){ここからちょっと応用話です、わからなかったり面倒ならswitchまで飛ばしておｋ}
ifの中にはbool型の変数も入ります。動画の2:10くらいを見てください。型にboolってあるよね。
bool型(という箱)にはTrue/False(ほんとう/うそ)が入ってます。

 bool flag;
 flag = (1+1==3);
これを実行すれば、1+1==3はウソなのでflagにはfalse(うそ)が入ります。
 if(flag){//処理}
これは、flagがウソなので処理されません。
 flag = (1+1==2);
 if(flag){//処理}
これは、flagがホントウなので処理されます。
 
else ifは特に補足ありません。

*switch～case
switch(変数)
case 変数:で同じ変数の場所にジャンプする。

 using System;
 
 class Test4{
     public static void Main(){
         int reimu=3535;
         switch(reimu){
             case 398:
                 Console.WriteLine(&quot;398じゃないよ&quot;);
                 break;
             case 3535:
                 Console.WriteLine(&quot;霊夢&quot;);
                 break;
             default:
                 Console.WriteLine(&quot;魔理沙&quot;);
                 break;
         }
     }
 }
switch～case文でできることはif文を使えば絶対に書き換えられますが
if文でできることでもcase文ではできないことがあります。
なるべくif文で済ませるようにしたほうが良いです。

**&amp;color(blue){ここからもちょっと応用っぽいはなし～goto文}
case ○○:
dafault:
とかのコロン(:)についてるやつは、ラベルといいます。
ラベルはgoto文でジャンプできます。そしてcaseの後にgoto文を使うときはbreakは要りません。
複数のcaseで同じ処理をしたいときに、いちいちコピペしなくても済みます。
使用例：xが0のときは「こんにちは」「今日もいい天気です」「魔理沙」
1のときは「今日もいい天気です」「魔理沙」
それ以外のときに「魔理沙」と表示したいときは
 int x=0;
 //なんかxをいろいろ変える処理
 switch(x){
 case 0:
     Console.WriteLine(&quot;こんにちは&quot;);
     goto case 1;
 case 1:
     Console.WriteLine(&quot;今日もいい天気です&quot;);
     goto default;
 default:
     Console.WriteLine(&quot;魔理沙&quot;);
     break;
 }
これでOK。
ちなみにgotoはswitch～case文じゃなくても使えますが
&amp;link2(あまりあちこちとんじゃうとわかりづらい,http://www.algolab.co.jp/~lum/pcnyumon/hosoku06.htm)ので
今はswitch～case文以外で使用しないほうが良。

Anonymous Coward追記:なので、いろんな言語は混乱しないような形でしか使えない/使いづらいように、機能を制限してきた。C言語でいうポインタ然り、goto→breakや繰り返し然り。(基本的にコードは上から下に流れるように読めるようにする。

&amp;color(red){文の流れ}
ラストのほうにあった話で、文は改行しないで一行に複数書くことができます。

 int x,y; x=3; y=4;
 Console.WriteLine(&quot;ああああ&quot;);Console.WriteLine(&quot;いいいい&quot;);
できるってだけで推奨はしません。    </description>
    <dc:date>2009-11-21T01:01:20+09:00</dc:date>
    <utime>1258732880</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/cmatome/pages/15.html">
    <title>3_演算子と文字列</title>
    <link>https://w.atwiki.jp/cmatome/pages/15.html</link>
    <description>
      ニコニコ動画
http://www.nicovideo.jp/watch/sm8465683

演算子には
普通の演算子&amp;color(red){+,-,*,/}がある。説明の必要ないでしょう。
%はあまりを求める。たとえば7÷5のあまりが2なので、7%5==2。
インクリ、デクリメント(++,--)もいいでしょう。このへんは説明不要でしょう。
//Anonymous Coward:演算子の優先順位の話も必要か？
//Anonymous Coward:冪乗の演算子がある、とたまに勘違いしている奴がいるよね。論理演算子だけど。注意入れておいたほうがいいのかなぁ？

*&amp;color(red){=と==の違い}
C#の演算子には、=という演算子と==という演算子があります。

=は変数に数値(とか文字列とか)を入れる演算子です。
==は等しいという演算子。

たとえば

 int x;
 x=3;
xに3を入れろという命令です。
 x==3；
これは、xが3と等しいという意味です。

また、
 int x=3; x=x+1;
という文は、xにx+1を入れろという意味になります。ここではxが3+1つまり4になります。

まぁとりあえず今はifの()中は==を入れる
ってことだけ覚えておけばおｋ。初心者は必ずif(x=3)とかやっちゃってコンパイルできなくなります。

*論理演算子
前回、if文をやりました。
bool型があることもやりました。

 if(x&lt;5){
 //処理
 }
これはxが5より小さいときに実行しますがさらにxが0より大きいときという条件にしてみます。
 if(0&lt;x&lt;5){
 //処理
 }
これで大丈夫と思いきや、エラーが出ます。
まず最初に、0&lt;xが判定され、falseと判断されます。
次にそのfalseと5の大小を比較します。もちろん、falseと5というまったく違う型を比較はできません。
ではどうすれば0&lt;x&lt;5の条件でifを判断できるのか。
それは&amp;color(red){論理演算子}を使います。
論理演算は、&amp;color(blue){!、|、&amp;、^}の4つがあります。

！は否定です。ウソとホントが逆転、falseはtrueになり、trueはfalseになります。
 if(!(1+1==3)){//1+1==3はfalseなので、!がついてtrueになる。その結果これはif文が処理される。
 //処理        !(1+1==2)なら処理されません。
 }

 if(!true){//これは処理されません
 //処理
 }

|は論理和、「または」ってやつです。
 if(x=2 | x=3){//xが2か3のどちらかならば
 //処理
 }

 bool T=true;F=false;
 if(T | F){//trueとfalseの論理和はtrueなので処理される。
 //処理
 }

&amp;は論理積「かつ」ってやつです。
 int x=3;
 if(0&lt;x &amp; x&lt;5){//xが5より小さくて0より大きければ
 //処理       いまはx=3なので条件を満たす、処理される
 }

排他的論理和については、他の論理演算と違ってifの中ではあまり出てこないでしょう。
参考のために書いておきます(別にいま覚えなくても必要になったときに覚えればいいです)
true^falseはtrue    false^trueはtrue
false^falseはfalse    true^trueはfalseです

 if((1+1==2)^(2+3==5))//これは両方ともtrueなので処理されません

 if((1+1==3)^(2+3==5))//これは片方だけtrueなので処理されます

 if((1+1==3)^(2+3==6))//これは両方falseなので処理されません

*文字列
文字列も変数として箱に入れることができます。
　string str=&quot;あいうえお&quot;;
intが整数しか入らなかったようにstringには文字列(&quot;で囲まれた文字)しか入りません。
// Anonymous Coward: verbatim string literal(@&quot;x&quot;等)の話や
// Regular string literalsのescape sequence&quot;\n&quot;等の話をすべきか？
// 空文字列に関する記述についてはどうするか？

&amp;color(red){悪い例}
 string str;
 str=3;//&quot;3&quot;ならOK

 string str;
 int i=100;
 str=i;//string型のstrにint型の100を入れることはできない

 string str1,str2;
 int i=100;
 str1=&quot;あああ&quot;;
 str2=str1+i;
 //これはコンパイルは可能、理由秘密。演算子オーバーロードだのobject型だの暗黙変換だの難しいことが絡む。
 //コンパイル可能だが初心者はやらないほうが良い。
&amp;color(red){悪い例ここまで}

*動画のプログラム
 using System;
 
 class Test5{
     public static void Main(){
         string s=&quot;かっぱっぱ&quot;;
         Console.WriteLine(s);
         Console.WriteLine(&quot;かっぱっぱ&quot;);
     }
 }

*&amp;color(red){文字列以外の型の文字列への変換ToString}
 using System;
 
 class Test5{
     public static void Main(){
         int i;
         i=3+4;
         Console.WriteLine(&quot;3+4= &quot;+i);
     }
 }

Console.WriteLineで&quot;3+4=&quot;とiというふうに、「文字列」と「int型」を足している。
本当はint型をstring型に変換する.ToString()というのをiにつけなければならない。
なんでこれでちゃんとコンパイルできるのかは演算子のオーバーロードだのobject型だのが絡んでくるので秘密。
とりあえず初心者はi.ToString()ってやってくれ。

あらゆる変数は、&amp;color(blue){.ToString()}とつけることで文字列に変換できる。

//Anonymous Coward:[他言語経験者向け]暗黙の型変換の怖さ
//http://d.hatena.ne.jp/gallu/20061108/p1
//http://vb.mvps.org/articles/pt199511.pdf
//http://d.hatena.ne.jp/mirakui/20090604/truefalse
//http://www.tokumaru.org/d/20090924.html#p01
//http://d.hatena.ne.jp/gallu/20091117/p1

例
 string str;
 int i=100;
 str=i.ToString();//これで、strに100という文字列が入りました。

また、逆にstrをintに入れたいときは&amp;color(blue){int.Parse()}を使い、()の中に文字を入れる。
.ToString()と違って()の中に文字列をいれるので紛らわしいので注意。あとは最初のiが小文字とか。
例
 int x;
 string str=&quot;100&quot;;
 x=int.Parse(str)

C#の言語仕様で、多少厳密さを省いて簡単さ、簡潔さを優先したためかえって初心者に誤解が生じる可能性がある。
とりあえず変数はすべて型があり、違う型は本来足したり代入したりできない。
 int i=30;
 string str=&quot;あいうえお&quot;;
 Console.WriteLine(str+i);
みたいにint型とstring型というまったく異なる型を足し合わせるのは本当はダメ(他のプログラミング言語ではこういうのはエラーが出る)
でもc#はコンパイルできるし、誤作動もしないようになってる。
でも
 int i=30;
 string str2;
 str2=i;
みたいのはコンパイルできないので、やっぱり違う型は足したりしないほうがいい。

*&amp;color(red){文字列の表現} わからないひとや面倒な人は読み飛ばしてください。まだ覚えなくてもあまり困りません。
&amp;color(blue){&quot;&quot;で囲まれた文字列は特殊な文字があります。}
 Console.WriteLine(&quot;あいうえお\tかき\&quot;くけこ\nさしすせそ&quot;);
\tはタブ(長い空白) \nは改行、\&quot;はダブルクオーテーションです。実行して確かめてください。
&amp;color(blue){10進と16進の変換はToString()を使います。}
数が16進であることは数字の前に0xをつけます(たとえば0xFFなら10進では255、0x64なら10進では100)
 Console.WriteLine(&quot;100を16進表示するのは100.ToString(\&quot;x\&quot;)を使います：&quot;+100.ToString(&quot;x&quot;));
 Console.WriteLine(&quot;16進のFFを10進表示するのは0xFF.ToString(\&quot;d\&quot;)を使います：&quot;+0xFF.ToString(&quot;d&quot;));
&quot;&quot;で囲まれたとおりに表現するのは@を使います。
 Console.WriteLine(@&quot;逐語リテラルです。改行します。
 タブをいれます		ダブルクオーテーションです&quot;&quot;　　　　\n\t
 　　　　　　　　　　　ああ
 　　　　　　　　　　　　　　　　いい&quot;);

実行してみて確かめてください。
他にも表現方法いろいろありますが知らなくても困りません。気になるなら&amp;link2(C# リテラル文字列 MSDN,http://msdn.microsoft.com/ja-jp/library/aa691090%28VS.71%29.aspx)とかグーグルで。
//Anonymous Coward: 確かに知らなくてもそれほど問題のあるものではないけれど、
//ユーザーが色々試そうとしたときに、「あれ、何でこれコンパイルできないんだ？」とかなったり
//コンパイルは通ったけど、「期待通りのものが出ない」っていう状況になるような障壁は取り除いておきたかった。(それとも、こうやって書かず、敢えて疑問に思った地点でユーザが自分で調べるように仕向けて「調べる力・姿勢」を養うことを重視する？)

//Anonymous Coward: bool型に対する演算子の話も早めに欲しいと思う
//単項演算子(否定)・ANDやOR等の論理演算・三項演算子ビットシフト演算子(左辺と右辺が異なる型の例)
//演算子は静的メソッドだのなんだの書いたのが認識できるかも。ユーザ定義の演算子と違って、リファレンスにその情報が載らず、仕様側にあるので、説明しづらいのが難点。(多分仕様では静的メソッド云々とは言ってないとおもうが)

//指摘ありがとう。論理演算子は書いておいた。三項演算子はどうだろうな。if使えばおなじようなことできるし。
//あとクラスのNullも重要だけどそれやりだしたら参照型の話とかになって難しくなりすぎるかな。
//ここでは動画で説明されてなかったのや誤解を生みそうな表現の指摘などにとどめるよ。土日以外あんまり編集できないしｗ

//Anonymous Coward:
//C#において、x++;は x += 1;に置き換えられるが、x = x + 1;に置き換えられるとは限らない[mag.autumn.org]
//http://mag.autumn.org/Content.modf?id=20090311175535
//当面intとdoubleしか使わないだろうし、初心者には厳しい内容となるので扱ってもらう気は無いけどメモ。    </description>
    <dc:date>2009-11-17T23:27:04+09:00</dc:date>
    <utime>1258468024</utime>
  </item>
  </rdf:RDF>
