p.69 オブジェクト型とボックス化
・クラス型は7章で、配列型は6章で、デリゲート型は12章で説明します
p.73 文字列型
・文字列の扱いはC、C++、C#、Javaでそれぞれ異なるので注意。
・C#ではstring型で扱うが、値型ではなく参照型になっている(p.40)
・値型の変数は型に合わせた大きさで、中に値を持つ。
・文字列は0文字以上で文字数無制限なので、型に合わせた大きさが取れない。よって、別途配置しておいて、
その開始位置(メモリアドレス)を変数値とすることで解決している
・よって、文字列変数「string s」への代入式「s = "ABC"」は下記のように実行される
① 文字列"ABC"がメモリの空いている場所に配置される
② 配置場所のメモリアドレスが、変数sに代入される
※ p.73にインスタンス(オブジェクト)の説明があるが、7章で扱う
・参照型においては、型によって便利な仕掛けであるプロパティやメソッドが提供されている
・string型の場合:
・Lengthプロパティ:文字数を返す。例:Consle.Write(s.Length) ⇒ 3
・IndexOf(文字)メソッド:その文字が何文字目にあるかを返す(先頭は0)。例:Consle.Write(s.IndexOf('C') ⇒ 2
・IndexOf(文字列)メソッド:その文字列が何文字目からあるかを返す(先頭は0)。例:Consle.Write(s.IndexOf("BC") ⇒ 1
・また、6章で説明する配列の構文を利用して、文字列の何文字目かの文字を得られる(先頭は0)。例:Consle.Write(s[2]) ⇒ C
・また、8章で説明する静的メソッドを持っており、文字列変数② = String.Copy(文字列変数①); とすることで、
文字列のコピーができる
p.73 string01.cs
//p.73 string01.cs
using System;
class string01
{
public static void Main()
{
string str = "今日はよい天気です";
string mystr;
char c;
// Lengthプロパティで文字列の長さを調べる
Console.WriteLine("strは長さ{0}です", str.Length); //9
//文字型変数cに文字列strの5番目の文字を代入
c = str[4];
Console.WriteLine("文字列の5番目の文字は「{0}」です", c); //「い」
//文字列strをmystrにコピー
mystr = String.Copy(str);
Console.WriteLine("mystr = {0}", mystr); //「今日はよい天気です」
//文字列の検索
int n = str.IndexOf('は'); //下記では先頭が0なので1加えて1番目からにしている
Console.WriteLine("文字列に'は'が出てくるのは{0}番目の文字", n + 1); //3
n = str.IndexOf("よい"); //下記では先頭が0なので1加えて1番目からにしている
Console.WriteLine("文字列に「よい」が出てくるのは{0}文字目から", n + 1); //4
}
}
p.75 is演算子とas演算子
・まだ学習していない参照型のみを対象としているので、説明は割愛します
p.78 練習問題1 ex0301.cs ヒント
・Main()メソッドの中は、Console.WriteLine("1年は{0}秒", 計算式); の1行のみで良い
作成例
//p.78 練習問題1 ex0301.cs
using System;
class ex0301
{
public static void Main()
{
Console.WriteLine("1年は{0}秒", 365 * 24 * 60 * 60);
}
}
p.78 練習問題2 ex0302.cs ヒント
①Console.ReadLine()で円の半径を文字列(string型)で得る ⇒ p.34 ②文字列を実数(double型)に変換して半径を得る ⇒ p.45 ③面積を「半径×半径×Math.PI」で得て表示する
作成例
//p.78 練習問題2 ex0302.cs
using System;
class ex0302
{
public static void Main()
{
string s; //入力用
Console.Write("半径:"); s = Console.ReadLine(); //文字列を読み込む
double r; //半径
r = double.Parse(s); //実数に変換
Console.WriteLine("半径{0}の円の面積は{1}", r, Math.PI * r * r); //表示
}
}
作成例・ショートバージョン
//p.78 練習問題2 ex0302.cs
using System;
class ex0302
{
public static void Main()
{
Console.Write("半径:");
double r = double.Parse(Console.ReadLine()); //半径を文字列で読み込み実数に変換
Console.WriteLine("半径{0}の円の面積は{1}", r, Math.PI * r * r); //半径と面積を表示
}
}
第4章 演算子
p.79 式と演算子
・加算などの演算を示す記号や単語を演算子といい、1つまたは2つまたは3つの情報を得て1つの結果を返す ・この情報をオペランド(項)といい、1つだと単項演算子、2つだと2項演算子という。 ・演算子には、計算結果を返す算術演算子、比較結果を返す関係演算子、論理演算を行う論理演算子などがある ・「=」も演算子で、代入演算子で、2項=演算子という。 ・演算子を含む式は評価されて1つの結果を返す(算術演算子の場合は計算が評価) ・これを式の評価(式の値)という ・よって式「d = 5 + 2」は、2項+演算子による「5 + 2」の評価である「7」を、2項=演算子によってdに代入している。 また、その評価は代入値である「7」となる。 ・これでわかるように、2項+演算子の方が2項=演算子より優先されている(詳細はp.97)
p.80 expression01.cs
// p.80 expression01.cs
using System;
class expression01 {
public static void Main() {
int a = 0;
Console.WriteLine("a = {0}", a);
//代入式を指定するとその評価(値)を表示できる(代入では代入値)
Console.WriteLine("(a = 7)の値は{0}", a = 7); //7となる
}
}
p.81 算術演算子
・すでに学習した2項+演算子、2項-演算子、2項*演算子、2項/演算子で加減乗除算が可能 ・加えて、2項%演算子(剰余算 p.84)、単項++演算子(インクリメント p.85)、単項--演算子(デクリメント p.85)がある ・2項+演算子は加算と結合の2つの演算が可能で、これを演算子のオーバーロード(多重定義)という ・2項+演算子は、2項の両方が加算可能であれば加算し、どちらかまたは両方が文字列ならば連結する
提出:p.78 練習問題2