C#の基礎
株式会社ＯＳＫ
ビジネスオブジェクト技術課
小井土 亨

2004/7/12

C#基礎

1

Ａｇｅｎｄａ

復習（基礎の基礎）

どのようにしてプログラムは動作するか？
どのようにしてプログラムを作成するか？

C#の基礎





データ型、変数
制御文（if , for)
演算子
メソッド

プログラムを作成する
 クラスを使ったプログラミング

クラス、名前空間、プロパティ

2004/7/12

C#基礎2

どのようにしてプログラムは動作するか？
予備知識

CPUとは

メモリとは


Operating System
ファイルの管理、メモリの管理、入出力の管理、プログラムの実行管理、ユーザーインターフェースの提供などを行なう基本ソフトウェア

プロセスとはCPUとデバイスの間でデータをやり取りするためのポート

OSとは



コンピュータ本体の中で、情報を記憶しておく場所
情報には、プログラムとデータがある

I/OポートとはCentral Processing Unit
プログラム命令を解釈し、実行する装置

プログラムを実行するときに、OSがプログラムを管理するための単位

ファイルとは

2004/7/12

記録ディスクに保存されたデータやプログラムの個々のまとまり

C#基礎3

どのようにしてプログラムは動作するか？
プログラムが動作する手順

プログラムファイル2004/7/12

①読み込む

メモリ

C#基礎②実行CPU

4

どのようにしてプログラムは動作するか？
.NETプログラムが動作する手順.NETプログラム
ファイル①コンパイル

機械語
コード2004/7/12.NET Frameworkが必要な部分だけを随時コンパイルを行う

②読み込む

メモリ

C#基礎③実行CPU

5

どのようにしてプログラムを作成するか？
プログラムを作成するということはプログラムを作成するということは






コンピュータをどのように動作させるか考える
人間が理解できる言語で、命令書を作成する
命令書をコンピュータが理解できる機械語に変換する
機械語をメモリに読み込んで実行させる
命令書（ソースファイル）機械語プログラム（EXEファイル）

読み込む

考える

2004/7/12

実行

コンパイラ

C#基礎

6

どのようにしてプログラムを作成するか？
C#でプログラムを作成するということはプログラムを作成するということは






コンピュータをどのように動作させるか考える
C#言語で、ソースファイルを作成する
ソースファイルを.NET Frameworkが理解できるMSILに変換する
MSILをコンピュータが理解できる機械語に変換し、メモリに読み込んで実行させる
MSIL翻訳
機械語翻訳
MSILプログラム（EXEファイル）C#ソースファイル

実行

C#コンパイラ

JITコンパイラ考える
2004/7/12

C#基礎7

どのようにしてプログラムを作成するか？
プログラムを作成するにはプログラムを作成するときの流れ







目的をしっかり理解する
目的を実現するために必要な項目を洗い出す
各項目の実現方法を決定する
実現方法をプログラムとして作成するポイント


入力と出力を明確にして、具体的なテストケースを考える
 例 足し算を行うプログラムを作成する場合


2004/7/12

1+2=3, 2+0=0,2+ -3 = -1, -2 + -1 = -3

Whatから初めてHowを決める
 What =何をしなければならないかという視点で考える
 How =どのような手順で実現するかという視点で考える
 最初からHowの視点で考えない

C#基礎

8

C#の基礎

2004/7/12

C#基礎

9

C#の基礎
簡単なプログラム利用するライブラリ指定

using System;
namespace Example1{class Program{
public static void Main(){
int x;
int y;
int answer;
x = 10;y = 20;answer = x * y;Console.WriteLine( answer);}}}

2004/7/12

名前空間の定義
クラスの定義Mainメソッドの定義
変数の定義
変数への代入変数の演算
結果の出力

C#基礎10C#の基礎名前空間とusing

名前空間とはプログラム要素に対して名前付けする時の領域
 名前空間を定義するとこで、自由に名前を付けることができる

名前空間の定義
namespace 空間名 { }{ }内を名前空間とする

using
名前空間を利用することを宣言する
 using 名前空間;

2004/7/12

C#基礎11

C#の基礎MainメソッドMainメソッドとはプログラムが開始される行形式


2004/7/12

public static void Main()C#基礎12

C#の基礎
文の区切り
プログラムは文の集まりで作成する
 文の終わり

セミコロン「;」で文を終わらせる
 改行は文の終わりではない

複文
複数の文をブロックとしてまとめることができる 中括弧「｛｝」で囲むことでブロックとする

2004/7/12

C#基礎13

C#の基礎
変数の定義


変数とは




変数の宣言


値を記憶するための箱のようなもの
変数の型 変数名;

変数の型の種類整数
int 実数
double 文字列 string

2004/7/12

C#基礎14

C#の基礎変数を利用した演算変数への値の代入


変数名 = 値;

演算変数 = 変数 演算子 定数;
 変数 = 変数 演算子 変数;
2004/7/12

C#基礎

演算子

意味+加算

-減算

*乗算

/除算

%

余り算

15

C#の基礎
入力と出力


出力.NET Frameworkが提供するConsoleクラスを利用する 利用方法（リファレンス）Console.WriteLine(変数); Console.WriteLine(文字列);


入力.NET Frameworkが提供するConsoleクラスを利用する 利用方法（リファレンス）

2004/7/12

string変数 = Console.ReadLine();
C#基礎

16

C#の基礎
コメントと字下げ

コメントとはソースコードを読む人にプログラム内容を説明するためのもの
 プログラムの動作とは関係なし
 コメントは、任意の位置に記述することができる 行コメント

ブロックコメント「//」移行がコメントとなる「/*」と「*/」で囲まれた範囲がコメントとなる

字下げ

2004/7/12

ソースコードを見やすくするために、字下げを行う
C#基礎17

課題
単位を変換するプログラムを作成する

マイル(mi)からキロメートル(km)へ変換


ヤード(yd)からメートル(m)へ変換


1 mi = 1.6093 km
1 yd = 0.9144 m

華氏（Fahrenheit）を摂氏（Celsius）に変換

変換式 Celsius = 5/9 * (Fahrenheit – 32)

摂氏を華氏に変換
 RGBからGray(グレースケール)へ変換


2004/7/12

Gray = R * 0.3 + G * 0.59 + B * 0.11
C#基礎

18

C#の基礎
複合代入演算子

複合代入演算子とは



形式




代入文を容易にするために用意された演算子
変数 演算子= 式；

例x = x + 100;
 y = y + z;
 w = w + n - m;
 z = z - 100;
2004/7/12

x += 100;y += z;w += n - m;z -= 100;
C#基礎

19

C#の基礎
インクリメント演算子、デクリメント演算子


インクリメント演算子、デクリメント演算子とは


インクリメント演算子
++変数 あるいは 変数++

デクリメント演算子


代入文を容易にするために用意された演算子--変数 あるいは 変数--例
x = x + 1;
 y = y - 1;

2004/7/12

++x;
--y;
C#基礎

20

C#の基礎真偽値(bool値)


真偽値とは



bool変数真(true)と偽(false)のいずれかを表す
bool型
真偽値を扱うための変数例
bool answer;
answer = 10 < 5;Console.WriteLine( answer );2004/7/12

C#基礎

21

C#の基礎関係演算子
関係演算子とは値同士の関係を表して、結果は真偽値となる演算子

2004/7/12

演算子

意味==等しい!=等しくない>より大きい<より小さい>=

以上

<=

以下

C#基礎22

C#の基礎
論理演算子


論理演算子とは真偽値同士の結びつき方を表す

よく利用する演算子

2004/7/12

演算子

意味||論理和&&

論理積!

否定

C#基礎23

C#の基礎
制御文 選択文
if文




形式




処理を条件によって分岐したい場合に使用する
条件には、関係演算子と論理演算子を組み合わせて利用する

例

2004/7/12

if(条件)文;if(条件)文; else 文;
if( age < 20 ){Console.WriteLine( "未成年" );}else{
Console.WriteLine( "成人" );}C#基礎24

C#の基礎制御文 繰り返し文
for文


形式


指定した条件が成り立つ間、処理を繰り返す
for(初期化;条件判定;インクリメント)文;

例
for( i = 1; i <= count; ++i ){total += i;}

2004/7/12

C#基礎25

C#の基礎配列
配列とは



配列の参照方法

同じ名前を使って参照することができる、変数の集まり複数の次元を持つこともできる
配列名に[]を付け、[]内に添え字を指定する
添え字は、定数でも変数でも良い
添え字は、0から始まり、サイズから1を引いた

一次元配列






2004/7/12

一般的な形式 型[] 配列名 = new 型[サイズ];
例 10個のint型配列
 int[] sample = new int[10]配列のサイズ 配列名.Length
C#基礎26

C#基礎型変換


キャスト






ToStringメソッド

キャストとは
 型の変換を行う形式
 (変換後の型)式
例 y = (int)d; // dはdouble、yはint
変数を文字列に変換する
例 s = d.ToString()

Parseメソッド

2004/7/12

文字列を数値型に変換する
形式
 型.Parse(文字列)例 y = int.Parse(str);
C#基礎27

課題
平均値を求める
Double型の10個の配列を定義し、平均値（Average）を求めるプログラムを作成する
 最大値と最小値を出力する
 値を入力できるようにする
 配列の数を入力できるようにする
 0以下の値は平均から除外するようにする

2004/7/12

C#基礎28

C#の基礎クラスとインスタンス

クラスとは分類、種類
 同種のものを集めて定義したもの


インスタンスとは

クラスを具体的にしたもの

例犬クラス

社員クラス


2004/7/12

ポチやタローはインスタンス
上田 雅史、中村 孝幸 はインスタンス

C#基礎29C#の基礎
クラスの一般形式

thisキーワード
プロパティ

2004/7/12

public class Dog{public Dog( string name ){this.name = name;}private string name;public string Name{get{return name;}}public void Cry(){
Console.Write( this.name + "が");Console.WriteLine("ワン");
}
}
C#基礎

クラス名
コンストラクタ

インスタンス変数メソッド

30

C#の基礎
アクセス修飾子

アクセス修飾子とは

クラスやメンバーなどに、アクセスできる範囲を定めるためのもの

アクセス修飾子の種類
publicprivate

2004/7/12

すべてのメンバーからアクセスすることができるクラスの中からのみアクセスすることができる

C#基礎

31

C#の基礎クラスの定義クラス定義の一般形式


アクセス修飾子 class クラス名 ｛ ｝

インスタンス変数の定義
アクセス修飾子 データ型 変数名;
 一般にアクセス修飾子は、privateとする
 クラス内では、thisキーワードを使用して参照する

例 this.name例

2004/7/12

private string name;
C#基礎32

C#の基礎メソッドの定義

メソッドとは

メソッド定義の一般形式


アクセス修飾子 戻り値の型 メソッド名(パラメータリスト){}

戻り値とは


クラスが提供する機能

メソッドから処理結果を返す値のこと
メソッド定義では、戻り値の型を定義する
void型
 戻り値を返さないことを示す型
 戻り値を返さないときに利用する

パラメータ


2004/7/12

メソッドを呼び出すときに渡すデータ
C#基礎33

C#の基礎コンストラクタ


コンストラクタとはクラスのインスタンスを生成するための特殊なメソッド
 パラメータが異なれば、複数用意することができる
 戻り値の定義はしない

メソッド定義の一般形式
アクセス修飾子 クラス名(パラメータリスト){} アクセス修飾子は、基本的にはpublic

2004/7/12

C#基礎34

C#の基礎プロパティの定義


プロパティとはクラスが提供する情報や属性
 一般的には、設定と参照を行うことができる

プロパティ定義の一般形式
アクセス修飾子 戻り値の型 プロパティ名{ get{}set{} }
 アクセス修飾子は基本的にpublic

参照だけのプロパティ


2004/7/12

getだけを用意することで、参照だけのプロパティを用意することができる

C#基礎35

C#の基礎
インスタンスの利用

インスタンス変数の定義

インスタンスの生成

クラスからnew演算子を使用して、インスタンスを生成することができる
インスタンス変数に代入する

メソッドの呼び出し


インスタンスを保存する変数を用意する
一般形式
 クラス名 インスタンス変数名；

インスタンス変数.メソッド名で、呼び出しを行う

プロパティの参照、設定


2004/7/12

インスタンス変数.プロパティ名で、参照と設定を行う

C#基礎36

課題１
試験（Examination）クラスを作成する
名前プロパティを作成する
 名前を設定できる、コンストラクタを作成する
 点（Score）プロパティを作成する
 試験にパスしたか回答するメソッドを作成する

メソッド名は、IsPass()とする
 メソッドの戻り値は論理値（bool）とする
 試験にパスするためには、60点以上とる必要がある

2004/7/12

C#基礎37

課題 その２
レジ（Register）クラスを作成する合計(Sum)プロパティを作成する
お金の入れる（PutMoney）メソッドを作成する
お金の取り出し（TakeMoney）メソッドを作成する
各貨幣のプロパティを作成する


このとき、入金と出金は、最適（最小）の枚数になると仮定する
 千札（ThousandNote）
 百円（HundredCoin）

レジクラスの作成時に、各貨幣の値を設定するコンストラクタを作成する
注意
処理をシンプルにするために、貨幣は千円と百円だけとし、扱う金額も百円以下はなしとする

2004/7/12

C#基礎38

課題 その３人（Person）クラスを作成する
Personクラスの作成時に、誕生日を設定するコンストラクタを作成する
 誕生日プロパティを作成する
 年齢プロパティを作成する
 指定した日にちのバイオグラフを計算するメソッドを作成する




計算式
身体のリズム = SIN(日数/23*PI*2)
 感情のリズム = SIN(日数/28*PI*2)
 知性のリズム = SIN(日数/33*PI*2)
2004/7/12

C#基礎39