p.57 論理型
・C#はC言語とは異なり、真理値(真偽値)を表すための型としてbool型が提供されている ・また、bool型の変数に代入したり初期化などに利用できる論理型リテラルとして,true(真)、false(偽)が提供されている ・例: bool flag = true; //フラグをオンにする(立てる) ・なお、これに伴い、C/C++で可能な「非0を真とし、0を偽とする」ことはC#では禁止。 ・bool型のNET型(p.42)は「System.Boolean」 ・C#が提供する「変数名.GetType()」を用いると、その変数の.NET型情報を返してくれるので、これをConsole.WriteLineなどで 表示することができる ・例: bool a; Console.Write(a.GetType()); //「System.Boolean」と表示 ・C#が提供する「変数名.ToString()」を用いると、変数の内容を示す文字列を返してくれるので、これをConsole.WriteLineなどで 表示することができる ・なお、bool型で値がtrueであれば「True」、falseであれば「False」となる。 ・実は、ToString()は自動的に動作するもので「Console.Write(a); 」としても「True」が表示される
p.57 bool01.cs
//p.57 bool01.cs
using System;
class bool01
{
public static void Main()
{
bool a = true; //論理型の変数aを真で初期化
bool b = false; //論理型の変数bを偽で初期化
Console.WriteLine("a = {0}, b = {1}", a, b); //「a = True, b = False」と表示
Console.WriteLine("aは{0}", a.GetType());//「aはSystem.Boolean」と表示
Console.WriteLine("aは文字列にすると「{0}」", a.ToString()); //「True」と表示
Console.WriteLine("bは文字列にすると「{0}」", b.ToString()); //「False」と表示
}
}
アレンジ演習:p.57 bool01a.cs
・2行追加して「論理型変数 + 文字列」が可能かどうか、可能であれば型と結果を表示しよう
作成例
//アレンジ演習:p.57 bool01.cs
using System;
class bool01
{
public static void Main()
{
bool a = true; //論理型の変数aを真で初期化
bool b = false; //論理型の変数bを偽で初期化
Console.WriteLine("a = {0}, b = {1}", a, b); //「a = True, b = False」と表示
Console.WriteLine("aは{0}", a.GetType());//「aはSystem.Boolean」と表示
Console.WriteLine("aは文字列にすると「{0}」", a.ToString()); //「True」と表示
Console.WriteLine("bは文字列にすると「{0}」", b.ToString()); //「False」と表示
Console.WriteLine(a + "型です"); //【追加】「True型です」と表示
Console.WriteLine((a + "型です").GetType()); //【追加】「System.String」と表示
}
}
p.58 リテラル
・プログラム中に記述された値のこと、整数リテラル、実数リテラル、文字リテラル、文字列リテラル、論理リテラルがある。 ・リテラルの型は表記法とサフィックス(接尾語)で決まる。 ・整数リテラルはサフィックスがなければint型→uint型→long型→ulong型(値の大きさによる)。 L/lを付けるとlong型、U/uを付けるとuint型、UL/ulを付けるとulong型。 ・実数リテラルはサフィックスがなければdouble型。F/fを付けるとfloat型、M/mを付けるとdecimal型。 ・文字リテラルはchar型 ・文字列リテラルはstring型 ・論理リテラルはbool型
p.59 Object.GetTypeメソッド
・前に「Object.」とつくものは、自動的に利用可能になっているメソッドなどを示す ・GetTypeメソッドの対象はリテラルや式でも良い ・なお、単項-演算子は優先度が低いのでカッコで囲み「(-10).GetType()」のように指定しすれば良い
p.60 literal01.cs
//p.60 literal01.cs
using System;
class literal01
{
public static void Main()
{
string format = "{0}の型は.NET型で{1}です"; //共通で用いるフォーマット指定
Console.WriteLine(format, "100", 100.GetType()); //System.Int32(int)
Console.WriteLine(format, "100U", 100U.GetType()); //System.UInt32(uint)
Console.WriteLine(format, "100L", 100L.GetType()); //System.Int64(long)
Console.WriteLine(format, "100UL", 100UL.GetType()); //System.UInt64(ulong)
Console.WriteLine(format, "1.25", 1.25.GetType()); //System.Double(double)
Console.WriteLine(format, "1.25F", 1.25F.GetType()); //System.Single(float)
Console.WriteLine(format, "1.25M", 1.25M.GetType()); //System.Decimal(decimal)
Console.WriteLine(format, "10F", 10F.GetType()); //System.Single(float)
Console.WriteLine(format, "10D", 10D.GetType()); //System.Double(double)
Console.WriteLine(format, "10M", 10M.GetType()); //System.Decimal(decimal)
Console.WriteLine();
Console.WriteLine(format, "-10D", (-10D).GetType()); //System.Double(double)
}
}
p.61 暗黙の型指定
・初期化によって型を確定できる場合、型名の代わりに「var」を指定すると、型が自動的に推定される ・例: var p = 3; //pはint型になる ・例: var f = true; //fはbool型になる ・なお、無を表すnullを初期値に出来るが、nullでは型を確定できないので対象外。 ・どの型になったのかはGetType()メソッドで確認できる ※ varを積極的に利用するかどうかは実務ではチームルールで決めていることがある
【補足】p.62 var01.cs、p.63 dynamic01.csについて
・「public static int Main()」となっているが、この内容ではいつもの「public static void Main()」として良い ・合わせて「return 0;」は不要
p.62 var01.cs
//p.62 var01.cs
using System;
class var01
{
public static void Main() //※テキストではintだがvoidで良い
{
var mytext = "猫でもわかるC#プログラミング 第"; //string型になる
var no = 3; //int型になる
var myc = '版'; //char型になる
Console.WriteLine(mytext + no + myc); //連結してstring型になる
Console.WriteLine("mytextの型は{0}で、noの型は{1}で、mycの型は{2}です",
mytext.GetType(), no.GetType(), myc.GetType()); //String,Int32,Char
}
}
提出:アレンジ演習:p.56 escape01b.cs
・4つある変数をすべてvar型にして動作を確認しよう