この章では、関数(メソッド)の作成と使い方について解説します。
関数とは特定の処理をまとめた単位のことです。
関数は、複数回呼び出すことができ、処理を自動化することができます。
「C#基礎講座」の8章です。この講座の詳細については以下から確認できます。
全てのサンプルプログラムのダウンロードは0章でダウンロードできます。
関数(メソッド)とは
メソッドとは、C#では関数やサブルーチンとも呼ばれ、特定の処理をまとめた単位です。メソッドは複数回呼び出すことができ、処理を自動化することができます。
メソッドの種類
C#には、staticメソッドとインスタンスメソッドの2つの種類があります。
staticメソッドは、クラスのインスタンスを生成することなく、直接呼び出すことができます。インスタンスメソッドは、クラスのインスタンスを生成し、それを使用して呼び出します。
class MyClass
{
static void staticMethod()
{
Console.WriteLine("This is a static method.");
}
void instanceMethod()
{
Console.WriteLine("This is an instance method.");
}
}
メソッドの定義の仕方
メソッドは以下のように定義します。
[アクセス修飾子] [戻り値の型] メソッド名([引数])
{
処理
}
アクセス修飾子には、public
、private
、protected
などがあります。
また、メソッドは引数リストを使用してデータを受け取ったり、戻り値を使用して結果を返すことができます。
これにより他の部分から呼び出したメソッドが処理を実行し、結果を返すことができるようになります。
さらに戻り値を返すにはreturn
を使用します。戻り値がない場合は、メソッド定義時に戻り値型としてvoidを指定し、戻り値がある場合は、戻り値の型を指定します。これにより、呼び出し元に対して、メソッドが返す結果の型を明示することができます。
アクセス修飾子の種類
アクセス修飾子によって、外部からのアクセスの制限をかけることができ、プログラムのセキュリティを高めることができます。アクセス修飾子には以下のようなものがあります。
アクセス修飾子 | 説明 |
---|---|
public | クラス内外からアクセス可能 |
private | クラス内からのみアクセス可能 |
protected | 同一アセンブリ内からアクセス可能 |
internal | 同一アセンブリ内からアクセス可能 |
protected internal | 同一アセンブリ内からアクセス可能、または継承したクラスからアクセス可能 |
上記のようにアクセス修飾子を使用することで、プログラムのセキュリティを高めることができます。
メソッド定義のサンプル
以下は、メソッドを定義するサンプルです。
class MyClass
{
public static void staticMethod(int num)
{
Console.WriteLine("This is a static method. num = " + num);
}
public int instanceMethod(int num1, int num2)
{
return num1 + num2;
}
}
上記のサンプルプログラムでは、staticMethodメソッドは、static修飾子がついているため、クラス名を使用して呼び出すことができます。また、このメソッドは引数にint型のnumを受け取り、その値を標準出力に出力します。
instanceMethodメソッドは、static修飾子がついていないため、インスタンスを生成し、そのインスタンスから呼び出すことができます。また、このメソッドは引数にint型のnum1とnum2を受け取りそれらを足し合わせた結果をint型で返します。
このように、MyClassクラスにはstaticMethodメソッドとinstanceMethodメソッドが定義されており、staticMethodメソッドはクラス名を使用して呼び出すことができ、instanceMethodメソッドはインスタンスを生成し、そのインスタンスから呼び出すことができます。
メソッドを呼び出す方法
インスタンスのメソッドにアクセスして呼び出すにはドット演算子.
を使用します。
以下のように記述します。
[インスタンス名.]メソッド名([引数]);
呼び出したメソッドが戻り値を持っている場合は、その値を変数に代入することができます。呼び出したメソッドが戻り値を持っていない場合は、変数に代入する必要はありません。
インスタンスメソッドの場合は、インスタンスを生成した上で呼び出します。
using System;
using System.Collections.Generic;
namespace Csharp_Course
{
class MyClass
{
public static void staticMethod(int num)
{
Console.WriteLine("This is a static method. num = " + num);
}
public int instanceMethod(int num1, int num2)
{
return num1 + num2;
}
}
internal class Program
{
static void Main(string[] args)
{
MyClass.staticMethod(5); // クラス名.staticメソッド名(引数)
MyClass myclass = new MyClass(); //インスタンス生成
int result = myclass.instanceMethod(3, 4); //インスタンス名.インスタンスメソッド名(引数)
Console.WriteLine("result = " + result);
}
}
}
出力:
This is a static method. num = 5
result = 7
上記のサンプルプログラムでは、MyClassクラスに「staticMethod」と「instanceMethod」という2つのメソッドを定義しています。
「staticMethod」は「static修飾子」がついており、クラス名で直接呼び出すことができる「staticメソッド」です。実行すると引数の値を表示します。
一方「instanceMethod」は、インスタンスを生成し、それを使用して呼び出すインスタンスメソッドです。実行すると、引数の値を足し算して結果を返します。
Main関数内では、MyClassクラスのstaticMethodメソッドとinstanceMethodメソッドをそれぞれ呼び出しています。これにより、呼び出したメソッドが返す結果を変数に代入することができます。
実際に関数を作成してみよう!
引数にxとyの2つの数値を引き渡して、そのx~yの和を求める静的メソッドをMyClassに作成してみましょう。
解答
以下が解答のサンプルです。
using System;
using System.Collections.Generic;
namespace Csharp_Course
{
class MyClass
{
public static int sum(int x, int y)
{
int sum = 0;
for (int i = x; i <= y; i++)
{
sum += i;
}
return sum;
}
}
internal class Program
{
static void Main(string[] args)
{
int x = 1;
int y = 10;
int result = MyClass.sum(x, y);
Console.WriteLine("xからyの和は" + result + "です。");
}
}
}
出力:xからyの和は55です。
上記のサンプルプログラムでは、MyClassクラスの中にsum関数を定義しています。
sum関数は、xからyまでの和を求める処理を行っています。処理の流れは、変数sumに0を代入し、xからyまで繰り返し処理を行いiの値をsumに加算しています。最後にsumの値を戻り値として返しています。
Main関数内では、xとyの値を設定しMyClassクラスのsum関数を呼び出し、結果をresultに代入しています。
最後にresultの値を表示することで、xからyまでの和を求めることができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
「関数の作成と使い方を学ぶ」のまとめ
この章では以下の内容を学びました。
- 関数(メソッド)は、特定の処理をまとめた単位である。
- staticメソッドとインスタンスメソッドの2つの種類がある。
- メソッドを呼び出すには、インスタンス名.メソッド名(引数);と記述する。
staticメソッドとインスタンスメソッドの違いや、定義方法、呼び出し方法について理解することができました!
関数は処理をまとめることで、自動化したり再利用性を高めることができます。
ぜひ、自分のプログラムにもメソッドを導入し、開発効率を上げてみてください。
チャプター
次章では、「オブジェクト指向」について学びます。