ヘッダー
C# サンプル集
 

メソッドの宣言

2021/3/14

→ Visual Basic のサンプルに切り替える

 

値を返さないメソッド

public void DoSomething()
{
    System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}   

Debug.WriteLineが表示される場所

 

 

値を返すメソッド

public int DoSomething()
{
    return 627;
}   

 

 

1つの引数をとるメソッド

public void DoSomething(string arg1)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");
}   

Debug.WriteLineが表示される場所

 

 

2つの引数をとるメソッド

public void DoSomething(string arg1, int arg2)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} {arg2} です。");
}

Debug.WriteLineが表示される場所

 

 

引数の違う同じ名前の複数のメソッドの宣言(オーバーロード)

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

public void SameName()
{
    //内容省略
}   

public void SameName(string arg1)
{
    //内容省略
}  

public void SameName(int arg1)
{
    //内容省略
}  

メモ:型違いのいろいろな引数に対応する必要がある場合は、型パラメーター(ジェネリック)の使用も検討します。

 

 

不特定の数の引数をとるメソッド

public void DoSomething(params int[] args)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数の数は {args.Length} 個です。");

    foreach (int arg in args)
    {
        System.Diagnostics.Debug.WriteLine(arg.ToString());
    }
}

Debug.WriteLineが表示される場所

 

 

静的メソッド

public static void DoSomething()
{
    System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}

Debug.WriteLineが表示される場所

 

 

省略可能引数

public void DoSomething(int arg1, int arg2 = 0)
{
    System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}  

メモ:省略可能な引数に値が渡されたかどうか直接確認する方法はありません。多くの場合既定値にありえない値を設定しておくことで区別できるようにします。

Debug.WriteLineが表示される場所

 

 

1つの型パラメーターをとるメソッド(ジェネリック)

public void DoSomething<T>(T arg1)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。型は {typeof(T).FullName} です。");
}

Debug.WriteLineが表示される場所

 

 

2つの型パラメーターをとるメソッド(ジェネリック)

public T2 DoSomething<T1, T2>(T1 arg1)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");
    return default(T2);
}

Debug.WriteLineが表示される場所

 

 

抽象メソッド(純粋仮想関数)


public abstract long DoSomething(string arg1);

メモ:抽象メソッドは抽象クラス(abstractで宣言されたクラス)内でのみ宣言できます。

メモ:仮想関数はキーワード virtual で宣言できます。

 

 

参照渡しの引数

public void DoSomething(ref string arg1)
{
    System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");

    arg1 = "引数の値を書き換えます。"; //参照渡しなので呼び出し元に影響します。
}    

Debug.WriteLineが表示される場所

メモ:参照渡しは計画的にご利用ください。

メモ:状況が限定できる場合は ref の代わりに in または out も使用できます。 → メソッドのパラメーター - C# リファレンス | Microsoft Docs

呼び出し例

string x = "ABC";
DoSomething(ref x);

 

 

名前のない複数の戻り値

public (int, string) DoSomething()
{
    return (627, "徳川家康")
}   

呼び出し例

var result = DoSomething();
System.Diagnostics.Debug.WriteLine(result.Item1); //627 と出力されます。
System.Diagnostics.Debug.WriteLine(result.Item2); //徳川家康 と出力されます。

Debug.WriteLineが表示される場所

 

 

名前付きの複数の戻り値

public (int TotalCount, string CaptainName) DoSomething()
{
    return (627, "徳川家康")
}   

呼び出し例

var result = DoSomething();
System.Diagnostics.Debug.WriteLine(result.TotalCount); //627 と出力されます。
System.Diagnostics.Debug.WriteLine(result.CaptainName); //徳川家康 と出力されます。

Debug.WriteLineが表示される場所

 

 

非同期実行されるメソッド

public async void AsyncDoSomething()
{
    await System.Threading.Tasks.Task.Run(() =>
    {
        System.Diagnostics.Debug.WriteLine("ここに記述した処理は呼び出し元とは非同期で実行されます。");
    });
}

Debug.WriteLineが表示される場所

 

 

コルーチン

public System.Collections.Generic.IEnumerable<int> GetNumbers()
{
    yield return 6;
    yield return 2;
    yield return 7;
}

呼び出し例

foreach (int number in GetNumbers())
{
    System.Diagnostics.Debug.WriteLine(number);
} 

「6」「2」「7」と3行出力されます。→ Debug.WriteLineが表示される場所

参考

コンテキスト キーワード yield - C# リファレンス | Microsoft Docs

 

 

式形式のメソッド


public int Add(int x, int y) => x + y;

メモ:式形式のメンバー - C# プログラミング ガイド | Microsoft Docs

 

 

ラムダ式によるローカルの関数

Func<int, int, int> add = (int x ,int y) => x + y;

System.Diagnostics.Debug.WriteLine(Add(2, 3)); //5 と出力されます。
System.Diagnostics.Debug.WriteLine(Add(8, 10)); //18 と出力されます。

Debug.WriteLineが表示される場所

 

複数行の処理を記述することもできます。

Func<string, string> trimNull (string value) =>
{
    if (value == null)
    {
        return "";
    }
    return value;
}

System.Diagnostics.Debug.WriteLine(trimNull("Hello")); //Hello と出力されます。 

Debug.WriteLineが表示される場所



ローカル関数

public void Test()
{
    int add (int x, int y)
    {
        return x + y;
    }

    System.Diagnostics.Debug.WriteLine(add(12, 34)); //46 と出力されます。
}

Debug.WriteLineが表示される場所