C#のデータ型は、大別して、データ自身が値を持つ「値型」と、データが値の位置(アドレス)を指し示す「参照型」に分か れます。

  値型
 
   単純な数字、文字、論理型、構造体型などが値型に属します。
  


  数字型
  論理型
  文字型
  構造体型
  列挙型
  暗黙的型変換とキャスト
  明示的型変換(Convert)

 参照型
 
   単純な文字列、配列、クラス型などが参照型に属します。  


  文字列型
  配列型

数字型
  
数字を表す型は、整数型、浮動小数点型など多種多様です。これらの型は厳密に区別されますが、
  プログラムの記述方法によっては、暗黙的に相互に型変換されます。
   数字型は、C#の予約語で定義されます。なお、C#には4倍精度浮動小数点型は用意されていませんので、有効桁数が十分必要
  な科学技術計算には向かない点に注意してください。


予約語
値の範囲
必要バイト数
整数型
int
- 21474483648〜2147483647
4
符号なし整数型
uint
0〜4294967295
4
短整数型
short
-32768〜32767
2
符号なし短 整数型 ushort
0-65535
2
長整数型
long
- 9223372036854775808〜9223372036854775807 8
符号なし長 整数型 ulong
0〜18446744073709551615
8
単精度浮動小数点型
float
(負)-3.4028235E+38〜- 1.401298E-45
(正)1.401298E-45〜3.4028235E+38
4
倍精度浮動小数点型
double
(負)- 1.79769313486231570E+308〜-4.94065645841246544E-324
(正)4.94065645841246544E- 324〜1.79769313486231570E+308
8
符号つきバイト型
sbyte
-128〜127
1
バイト型
byte
0〜255
1
 
    int型は現在のところ、プログラム中で最も利用頻度の高い数字型となります。これは、現在のパソコンのCPUの主流が32bit(4バイト)型
   であり、実行速度の最適化が可能であるためです。(CPUのレジスタ構造が32bit長であった場合、レジスタ間の受渡し、演算等を効率よく
   行うことができます。)
    なお、Visual Studio2005で は、64bitCPU用コンパイルが可能となっており、メモリ単位容量単価が低下している現状では、long型が今後
   主流となってくる可能性があります。
  
    さて、数字型は次のようにプログラム冒頭若しくはメソッド(サブルーチン)の中で宣言します。
        int i ;
         float k;

    宣言時にあわせて初期化をする場合は、次のとおり値を代入します。
         int i=1 ;
         float k=5.0F;

          また、定数として宣言するときは、constを宣言文の前に付けます。constで宣言しておくと、プログラム中で値が変わってしまうのを避け
   ることができます。
                  const int i=1;

 
論理型
    論理型はBoolean2値関数です。選択できる値は、true 又は falseのみです。2値のみですが、データ長は1ビットで十分ですが、最
  少数データ単位1バイトが割り当てられます。
        宣言文の例は次のとおり。
                    bool flag=true;
 
 
文字型
       1文字を表すデータ型です。同じ文字を扱う文字列型は参照型であるため、文字型と文字列型は厳密に区別されます。
    C#で扱う文字コードは、Unicode(2バイトコード)となります。日本独自のコード形式であるShift-JISコードとは、全く
    体系が異なります。
 
        宣言文の例は次のとおり。
                     char ch='文';
       

    文字型の中で注意が必要なのは、エスケープ文字の取扱いです。
エスケープ文字はアスキーUコード(アルファベッ ト、
   数字、記号 等)の下位(0〜31)に配置されているコントロールコードを、Unicodeで取扱うために用います。
    例えば、改行は、
アスキーUコードでは10ですが、エスケープ文字では例えば、ch='\n'; と表します。
    エスケープ文字の一覧は次のとおり。
コ ントロール
エ スケープ文字
ベルを鳴らす
※ほとんど使うケースなし
\a
カーソル位置を1文字戻す(バックスペー ス)
\b
改ページ
\f
改行
\n
カーソル位置を左端に戻す(リターン)
\r
水平タブ
\t
垂直タブ
\v
    
構造体型
  異なる 型のデータをセットとして1つの値で扱うデータ型で、structステートメントを用います。
   記述例は次のとおり。
     
          struct Car
          {
              public string Maker; //自動車メーカー名
              public string Name;  //車種名
              public int
displacement; //排気量

       public string option;  //オプション機能    
        }

   public宣言した各要素は、Carのメンバとなります。
   この型宣言をすると、Carを新たなデータ型として、プログラム中で取り扱うことができます。
       例えば、次のような宣言が可能になります。

          Car toyota;

        構造体を配列化することもできます。また、構造体をひとつの値のように取り扱うことができます。
    例えば、次のような具合です。

           Car[] toyota=new toyota[2]:
           Car newmaker;

             toyota[0].Maker="TOYOTA";
             toyota[0].Name="CROWN";
             toyota[0].displacement=3000;
             toyota[0].option="ABS";

             toyota[1].Maker="TOYOTA";
             toyota[1].Name="ビッツ";
             toyota[1].displacement=1500;
             toyota[1].option="4WD";

           newmaker=toyota[1];
         


     C#で予約されている構造体としては、DateTime構造体があります。
     以下、DateTime構造体の各メンバー参照する例を示します。

           DateTime dt=DateTime.Now;                       //現在時の取得
             textBox1.Text=dt.Year.ToString( );            //年
             textBox2.Text=dt.Month.ToString( );          //月
             textBox3.Text=dt.Day.ToString( );             //日
             textBox4.Text=dt.Hour.ToString( );            //時
             textBox5.Text=dt.Minutes.ToString( );       //分
             textBox6.Text=dt.Second.ToString( );        //秒
             textBox7.Text=dt.MilliSecond.ToString( );  //ミリ秒

列挙型
    この型では文字どおり持ちえる値をすべて列 挙します。
         例えば、
               enum Company
               {
                 営業部、
                 総務部、
                 設計部、
                 システム部、
                 製造部
               }

       という具合です。
    列挙した値を参照するには、Company. 総務部のように行います。

暗黙的型変換とキャスト
     数字型で、バイト数が大きい型へ代入する場合には、暗黙的に型変換を行うことができます。
    例えば、
               float a;
               short s=5;
               long l=50000;
               a=s+l;
    では、演算結果がfloat(single)型に変換されてaに代入されます。
    逆に、バイト数が小さい型へ代入する場合には、暗黙的には行われず、(型)で変換先の型名を指定する必要があります。
        float a=1.234;
               int i;
               i=(int)a;

明示的型変換(Convert)
     暗黙的若しくはキャストによっては、型変換できないとき、又は型変換について不安がある場合には、Convertステート
    メントにより明示的に型変換する方法があります。
     Convertを使えば、値型←→参照型の間の型変換を行うことができます。
            string s;
             int i=12345;
             s=Convert.ToString(i);  (又は  s=i.ToString(); )

変換先の型名
Convertクラス名
int
Convert.ToInt32
uint
Convert.ToUInt32
short
Convert.ToInt16
usort
Convert.ToUInt16
long
Convert.ToInt64
ulong
Convert.ToUInt64
float
Convert.ToSingle
double
Convert.ToDouble
sbyte
Convert.ToSByte
byte
Convert.ToByte
bool
Convert.ToBoolean
char
Convert.ToBoolean
date
Convert.ToDateTime
decimal
Convert.ToDecimal
string
Convert.ToString
        

文字列型
  
文字列は、文字型の集合体です。文字列の大きさに特に制限はありませんが、文字数×2バイトの領域を占めます。
        stringクラスの宣言の例は次のとおりです。
 
          string s="TEST文字";

        以下、主なstring クラスのプロパティとメソッドの使用例を示します。
使 用例
解 説
i=s.Length;   文字長の取得
ss=s.Substring(m,n);   文字列sのm番目の文字位置からn文字を文字列ssに代入
i=s.IndexOf(ss,m);   文字列sのm番目の検索開始位置から後に検索し、文字列ssに一致する文字列が発見できたら、発見した先頭位置をiに代入。 検索開始位置を省略すると先頭から検索。
i=s.LastIndexOf(ss,m);   文字列sのm番目の検索開始位置から前に検索し、文字列ssに一致する文字列が発見できたら、発見した先頭位置をiに代入。検索開始位置を省略すると最後 尾から検索。
i=Compare(s1,s2); s1> s2ならiは正、s1<s2なら負、s1=s2なら0をiに代入
b=Equals(s1,s2); s1 =s2ならBoolean bは真、以外なら偽
ss=s.PadRight(m,ch); sの右側に文字chを埋めて、文字長を全体で mにする。chを省略すると、空白を埋める。
ss=s.PadLeft(m,ch); sの左側に文字chを埋めて、文字長を全体で mにする。chを省略すると、空白を埋める。
             s.Replace(s1,s2); //sの文字列のうち、s1をすべてs2に置き換える
string s= "Good/Morning/Mary!";
string[] parts=s.Split('/');
 文字列を区切り文字で分解するsplit メソッドです。左記の例では、文字列sを区切り文字'/ 'で分解し、文字配列partsの各要素に代入します。



  

    

 
配列型
    同じ種類の複数データを同じ変数名で取り扱う場合には配列型を用います。
    配列は、次の例のようにデータ型の後にインデックス用の[ ]を入れることによりデータを区分します。
     int[] i=new int[m];    //mはデータ数
      string[] i=new int[n]; //nはデータ数

        具体的な使い方は次の例を参照してください。
          int i;
          string s="abcdefg";
          string[] t=new string[s.Length];
           for (i=0;i<s.Length;i++)
           {
               t[i]=s.Substring[i,1];  //sの各文字をtの各配列に入れる
           }

    単純型のデータ同様、配列にも初期値を与えることができます。
      
          string[] t={"a","b","c","d","e","f","g"};

         以上の配列では、1つのインデックスによって、配列要素を区別してきましたが、もちろん、2次元の配列
   を作ることもできます。
      int [ , ]  i=new int[m,n];  //m,nはint型

    2次元配列は、平面上の座標などを記録する場合に便利です。
 
       以下、主な配 列型のメソッドです。 
     Array.Sort (samplearray);  //配列のソート
      samplearray1.CopyTo(samplearray2,0); //配列のコピー