C#のvoidとは?戻り値なしメソッドの意味・使い方・注意点を初心者向けに解説

はじめに

C#を学び始めると、かなり早い段階で目にするキーワードのひとつがvoidです。

たとえば、C#の入門コードでは次のような形がよく登場します。

C#
static void Main()
{
Console.WriteLine("Hello, World!");
}

この中にあるvoidは、C#のメソッドを理解するうえでとても重要なキーワードです。

しかし初心者のうちは、「voidとは何か」「なぜ書く必要があるのか」「returnとはどう違うのか」「voidメソッドは何をしているのか」と迷いやすいポイントでもあります。

この記事では、C#のvoidについて、戻り値なしメソッドの意味、基本的な使い方、戻り値ありメソッドとの違い、注意点、よくあるエラーまで初心者向けにわかりやすく解説します。

1. C#のvoidとは?まずは意味を初心者向けに解説

C#のvoidは、メソッドの戻り値に関するキーワードです。

メソッドとは、ひとまとまりの処理に名前を付けたものです。C#では、メソッドを定義するときに「そのメソッドが何か値を返すのか」を書く必要があります。

そのとき、「このメソッドは値を返しません」と表すために使うのがvoidです。

1-1. voidは「戻り値がない」ことを表すキーワード

voidは、「戻り値がない」という意味を表します。

たとえば、次のメソッドを見てみましょう。

C#
void ShowMessage()
{
Console.WriteLine("こんにちは");
}

このShowMessageメソッドは、画面に「こんにちは」と表示します。

しかし、このメソッドを実行した結果として、呼び出し元にintstringなどの値を返すわけではありません。

そのため、戻り値の型としてvoidを指定しています。

C#
void ShowMessage()

この部分は、「ShowMessageというメソッドは、戻り値を返さない」という意味です。

1-2. メソッドの戻り値とは何か

戻り値とは、メソッドの処理結果として呼び出し元に返す値のことです。

たとえば、次のメソッドは2つの数値を足して、その結果を返します。

C#
int Add(int a, int b)
{
return a + b;
}

このメソッドはint型の値を返します。

C#
int result = Add(3, 5);
Console.WriteLine(result);

実行すると、resultには8が入ります。

このように、メソッドを呼び出したあとで結果を変数に入れたり、別の処理で使ったりできる値が戻り値です。

一方、voidメソッドは戻り値を返さないため、次のように結果を変数に代入することはできません。

C#
void ShowMessage()
{
Console.WriteLine("こんにちは");
}
C#
// エラーになる
string message = ShowMessage();

ShowMessageは値を返さないため、string型の変数に代入できないのです。

1-3. voidを使う場面と使わない場面

voidは、処理を実行すること自体が目的の場合によく使います。

たとえば、次のような処理です。

C#
void PrintName(string name)
{
Console.WriteLine(name);
}

このメソッドは、名前を画面に表示することが目的です。表示したあとに何か値を返す必要がないため、voidを使います。

一方、計算結果や判定結果をあとで使いたい場合は、voidではなく戻り値ありのメソッドにします。

C#
int GetSquare(int number)
{
return number * number;
}

このメソッドは、計算結果を返すことが目的です。そのため、戻り値の型はvoidではなくintになります。

つまり、基本的には次のように考えるとわかりやすいです。

処理を実行するだけならvoid、処理結果をあとで使うなら戻り値ありのメソッドです。

1-4. 「何も処理しない」という意味ではない点に注意

voidは「何もしない」という意味ではありません。

voidはあくまで「戻り値がない」という意味です。

たとえば、次のメソッドはvoidですが、しっかり処理を行っています。

C#
void SaveLog(string message)
{
Console.WriteLine("ログ: " + message);
}

このメソッドは値を返しませんが、ログを表示するという処理を実行しています。

そのため、voidを見たときは「このメソッドは何もしていない」と考えるのではなく、「このメソッドは呼び出し元に値を返さない」と理解しましょう。

2. C#のvoidメソッドの基本的な書き方

C#でvoidメソッドを書くときは、メソッド名の前にvoidを指定します。

ここでは、基本的な構文から簡単なサンプルまで見ていきましょう。

2-1. voidメソッドの構文

voidメソッドの基本形は次のとおりです。

C#
void メソッド名()
{
実行する処理;
}

たとえば、メッセージを表示するメソッドなら次のように書けます。

C#
void ShowMessage()
{
Console.WriteLine("メッセージを表示します");
}

このメソッドを呼び出すには、次のようにメソッド名を書きます。

C#
ShowMessage();

voidメソッドは値を返さないため、基本的には「呼び出して実行する」だけです。

2-2. Console.WriteLineを使った簡単なサンプル

C#のvoidを理解するには、Console.WriteLineを使った例がわかりやすいです。

C#
using System;

class Program
{
static void Main()
{
ShowGreeting();
}

static void ShowGreeting()
{
Console.WriteLine("おはようございます");
}
}

このコードでは、Mainメソッドの中でShowGreetingメソッドを呼び出しています。

C#
ShowGreeting();

ShowGreetingメソッドは、画面に文字を表示します。

C#
static void ShowGreeting()
{
Console.WriteLine("おはようございます");
}

戻り値を返す必要がないため、戻り値の型としてvoidを指定しています。

2-3. 引数ありのvoidメソッドの例

voidメソッドは、引数を受け取ることもできます。

引数とは、メソッドに渡す値のことです。

C#
using System;

class Program
{
static void Main()
{
PrintUserName("田中");
PrintUserName("佐藤");
}

static void PrintUserName(string name)
{
Console.WriteLine("ユーザー名: " + name);
}
}

この例では、PrintUserNameメソッドがstring型のnameを受け取っています。

C#
static void PrintUserName(string name)

ただし、戻り値は返さないためvoidです。

実行すると、次のように表示されます。

ユーザー名: 田中
ユーザー名: 佐藤

このように、voidメソッドでも引数を使って値を受け取り、その値をもとに処理を行うことができます。

2-4. static void Mainの意味

C#の入門でよく見るstatic void Mainも、voidの使い方のひとつです。

C#
static void Main()
{
Console.WriteLine("Hello, World!");
}

このMainメソッドは、C#プログラムの実行開始地点です。

static void Mainの意味を分解すると、次のようになります。

staticは、インスタンスを作らずに呼び出せることを表します。

voidは、戻り値を返さないことを表します。

Mainは、プログラムの開始地点となるメソッド名です。

つまり、static void Main()は「プログラム開始時に実行される、戻り値なしのメソッド」と考えるとわかりやすいです。

なお、C#ではMainメソッドがintを返す形で書かれることもあります。

C#
static int Main()
{
return 0;
}

ただし、初心者向けの基本としては、まずstatic void Main()を理解しておくとよいでしょう。

3. voidと戻り値ありメソッドの違い

voidメソッドと戻り値ありメソッドの違いは、処理結果を呼び出し元に返すかどうかです。

この違いを理解すると、どちらを使うべきか判断しやすくなります。

3-1. int・string・boolなどを返すメソッドとの比較

戻り値ありメソッドでは、voidの代わりにintstringboolなどの型を書きます。

たとえば、intを返すメソッドは次のように書きます。

C#
int GetAge()
{
return 20;
}

stringを返すメソッドは次のように書きます。

C#
string GetName()
{
return "山田";
}

boolを返すメソッドは次のように書きます。

C#
bool IsAdult(int age)
{
return age >= 20;
}

一方、voidメソッドは値を返しません。

C#
void ShowAge()
{
Console.WriteLine(20);
}

GetAgeは年齢を値として返しますが、ShowAgeは年齢を画面に表示するだけです。

この違いが、voidと戻り値ありメソッドの大きな違いです。

3-2. returnで値を返す場合と返さない場合

戻り値ありメソッドでは、returnを使って値を返します。

C#
int Add(int a, int b)
{
return a + b;
}

この場合、戻り値の型はintなので、returnint型の値を返す必要があります。

C#
int result = Add(10, 20);

一方、voidメソッドでは値を返しません。

C#
void PrintResult(int value)
{
Console.WriteLine("結果: " + value);
}

このメソッドは画面に表示するだけなので、return 値;を書く必要はありません。

3-3. voidメソッドでreturnを使うケース

voidメソッドでは値を返すことはできませんが、return;だけを書くことはできます。

C#
void CheckNumber(int number)
{
if (number < 0)
{
Console.WriteLine("負の数です");
return;
}

Console.WriteLine("0以上の数です");
}

この例では、numberが負の数だった場合、メッセージを表示してメソッドの処理をそこで終了しています。

C#
return;

voidメソッドで使うreturn;は、値を返すためではなく、メソッドの処理を途中で終わらせるために使います。

次のように値を返そうとするとエラーになります。

C#
void Sample()
{
return 10; // エラー
}

voidメソッドでは、returnのあとに値を書けません。

3-4. どちらを使うべきか判断する基準

voidを使うか、戻り値ありメソッドにするかは、メソッドの目的で判断します。

たとえば、計算結果をあとで使いたいなら戻り値ありにします。

C#
int CalculateTotal(int price, int count)
{
return price * count;
}

このメソッドなら、結果を変数に入れて別の処理に使えます。

C#
int total = CalculateTotal(100, 3);
Console.WriteLine(total);

一方、画面に表示するだけならvoidで十分です。

C#
void ShowTotal(int total)
{
Console.WriteLine("合計金額: " + total);
}

判断に迷ったときは、「このメソッドの結果をあとで使いたいか」を考えるとよいでしょう。

結果をあとで使うなら戻り値あり、実行するだけでよいならvoidです。

4. voidメソッドの具体的な使い方

voidメソッドは、C#のさまざまな場面で使われます。

特に、画面表示、状態変更、ファイル保存、ログ出力、イベント処理などではvoidがよく登場します。

4-1. 画面に文字を表示する処理

画面に文字を表示する処理は、voidメソッドの代表的な使い方です。

C#
void ShowWelcomeMessage()
{
Console.WriteLine("ようこそ");
}

このメソッドは、画面に「ようこそ」と表示するだけです。

戻り値を返す必要がないため、voidを使います。

引数を使えば、表示内容を変えることもできます。

C#
void ShowMessage(string message)
{
Console.WriteLine(message);
}

呼び出し例は次のとおりです。

C#
ShowMessage("処理を開始します");
ShowMessage("処理が完了しました");

このように、表示処理は「結果を返す」よりも「実行する」ことが目的なので、voidに向いています。

4-2. 変数やオブジェクトの状態を変更する処理

voidメソッドは、オブジェクトの状態を変更する処理にも使われます。

たとえば、ユーザーの名前を変更する処理を考えてみましょう。

C#
class User
{
public string Name;

public void ChangeName(string newName)
{
Name = newName;
}
}

このChangeNameメソッドは、UserオブジェクトのNameを変更します。

C#
User user = new User();
user.Name = "田中";

user.ChangeName("佐藤");

Console.WriteLine(user.Name);

実行すると、Nameは「佐藤」に変わります。

ChangeNameメソッドは値を返していませんが、オブジェクトの状態を変更しています。

このように、戻り値がなくても、メソッドの中で何らかの変更を行うことがあります。

4-3. ファイル保存・ログ出力など副作用が目的の処理

ファイル保存やログ出力のように、プログラムの外部に影響を与える処理でもvoidが使われます。

このような処理は、副作用が目的の処理と呼ばれることがあります。

たとえば、ログ出力の例です。

C#
void WriteLog(string message)
{
Console.WriteLine("[LOG] " + message);
}

実際のアプリケーションでは、ファイルにログを書き込むこともあります。

C#
using System.IO;

void SaveText(string path, string text)
{
File.WriteAllText(path, text);
}

このメソッドは、指定されたファイルに文字列を保存します。

戻り値を返していませんが、ファイルが作成または更新されるという処理を行っています。

このように、外部への出力や状態変更が目的の場合、voidメソッドが使われることがあります。

4-4. イベント処理で使われるvoid

C#では、ボタンがクリックされたときなどのイベント処理でもvoidがよく使われます。

たとえば、Windows FormsやWPFなどでは、イベントハンドラーが次のような形になることがあります。

C#
void Button_Click(object sender, EventArgs e)
{
Console.WriteLine("ボタンがクリックされました");
}

イベント処理は、ユーザーの操作に反応して処理を実行することが目的です。

多くの場合、呼び出し元に値を返す必要はありません。

そのため、イベントハンドラーではvoidがよく使われます。

ただし、非同期処理を使う場合のasync voidには注意が必要です。これについては後半で解説します。

5. voidを使うときの注意点

voidは便利ですが、何でもvoidにすればよいわけではありません。

戻り値がないという性質を理解していないと、コードが使いにくくなったり、エラーの原因になったりします。

5-1. voidメソッドの結果は変数に代入できない

voidメソッドは戻り値を返さないため、結果を変数に代入できません。

C#
void ShowMessage()
{
Console.WriteLine("こんにちは");
}

このメソッドを次のように使うことはできません。

C#
string result = ShowMessage(); // エラー

ShowMessagestringを返していないためです。

もし結果を変数に入れたいなら、戻り値ありのメソッドにする必要があります。

C#
string GetMessage()
{
return "こんにちは";
}

この場合は、次のように代入できます。

C#
string result = GetMessage();
Console.WriteLine(result);

5-2. voidメソッドは計算結果の再利用に向かない

voidメソッドは、計算結果を再利用したい場合には向いていません。

たとえば、次のようなメソッドを考えてみましょう。

C#
void PrintTotal(int price, int count)
{
Console.WriteLine(price * count);
}

このメソッドは合計金額を表示しますが、計算結果を呼び出し元に返していません。

そのため、合計金額をあとで割引計算や税込計算に使うことができません。

再利用したい場合は、戻り値ありにしたほうが便利です。

C#
int CalculateTotal(int price, int count)
{
return price * count;
}

このようにすれば、計算結果を変数に入れて使えます。

C#
int total = CalculateTotal(100, 3);
int discounted = total - 50;

Console.WriteLine(discounted);

計算結果を別の処理でも使いたい場合は、voidではなく戻り値ありメソッドを選びましょう。

5-3. 処理内容が分かるメソッド名にする

voidメソッドは戻り値がないため、メソッド名から「何をするのか」がわかることが大切です。

たとえば、次のような名前は少し曖昧です。

C#
void Data()
{
// 何をするのか分かりにくい
}

この名前だけでは、データを取得するのか、表示するのか、保存するのかわかりません。

voidメソッドでは、処理を表す動詞を使った名前にするとわかりやすくなります。

C#
void SaveData()
{
// データを保存する
}

void PrintData()
{
// データを表示する
}

void ClearData()
{
// データを消去する
}

SavePrintClearShowUpdateDeleteなど、処理内容が伝わる名前にすると、コードの読みやすさが上がります。

5-4. 何でもvoidにするとテストや保守が難しくなる

初心者のうちは、すべての処理をvoidメソッドにしてしまいがちです。

しかし、何でもvoidにすると、テストや保守が難しくなることがあります。

たとえば、次のメソッドは計算結果を表示するだけです。

C#
void PrintTaxIncludedPrice(int price)
{
int result = (int)(price * 1.1);
Console.WriteLine(result);
}

このメソッドは、画面表示まで含んでいるため、計算結果だけを確認したい場合に使いにくくなります。

計算と表示を分けると、より扱いやすくなります。

C#
int CalculateTaxIncludedPrice(int price)
{
return (int)(price * 1.1);
}

void PrintPrice(int price)
{
Console.WriteLine(price);
}

このようにすると、計算結果をテストしやすくなります。

C#
int price = CalculateTaxIncludedPrice(1000);
PrintPrice(price);

voidは便利ですが、処理結果を確認したい場合や再利用したい場合は、戻り値ありメソッドにすることも検討しましょう。

6. 初心者が間違えやすいvoidのエラー例

C#のvoidは基本的なキーワードですが、初心者がつまずきやすいエラーもあります。

ここでは、よくある間違いを具体例で見ていきます。

6-1. voidメソッドの戻り値を受け取ろうとする

よくある間違いのひとつが、voidメソッドの結果を変数に代入しようとすることです。

C#
void PrintHello()
{
Console.WriteLine("Hello");
}

このメソッドに対して、次のように書くとエラーになります。

C#
string result = PrintHello(); // エラー

PrintHelloは戻り値を返さないため、resultに入れる値がありません。

正しくは、次のように呼び出すだけです。

C#
PrintHello();

もし文字列を受け取りたいなら、メソッドをstring型で返すようにします。

C#
string GetHello()
{
return "Hello";
}
C#
string result = GetHello();
Console.WriteLine(result);

6-2. voidメソッドで値をreturnしようとする

voidメソッドでは、returnで値を返すことはできません。

C#
void GetNumber()
{
return 10; // エラー
}

voidは戻り値なしを表すため、return 10;のように値を返す書き方はできません。

値を返したい場合は、戻り値の型を変更します。

C#
int GetNumber()
{
return 10;
}

一方、voidメソッド内で処理を途中終了したいだけなら、次のようにreturn;と書きます。

C#
void CheckValue(int value)
{
if (value < 0)
{
return;
}

Console.WriteLine(value);
}

voidメソッドで使えるのは、値なしのreturn;です。

6-3. 戻り値ありメソッドでreturnを書き忘れる

voidではないメソッドでは、基本的に値を返す必要があります。

たとえば、次のコードはエラーになります。

C#
int Add(int a, int b)
{
int result = a + b;
// returnを書き忘れている
}

このメソッドはintを返すと宣言しているため、returnint型の値を返さなければなりません。

正しくは次のように書きます。

C#
int Add(int a, int b)
{
int result = a + b;
return result;
}

または、次のように直接返すこともできます。

C#
int Add(int a, int b)
{
return a + b;
}

戻り値ありメソッドでは、宣言した型に合う値をreturnする必要があります。

6-4. voidとnullを混同する

voidnullを混同するのも、初心者によくある間違いです。

voidは「戻り値がない」という意味です。

一方、nullは「参照先がない」「値が存在しない状態」を表します。

たとえば、次のようにstring型の変数にnullを入れることがあります。

C#
string name = null;

これは、nameがどの文字列も参照していない状態です。

しかし、voidは値ではないため、変数に入れるものではありません。

C#
// このような使い方はできない
// void value;

また、voidメソッドはnullを返しているわけでもありません。

C#
void Show()
{
Console.WriteLine("表示します");
}

このメソッドは、nullを返しているのではなく、そもそも戻り値を返していません。

voidは戻り値の有無に関するキーワード、nullは値の状態を表すもの、と分けて理解しましょう。

7. voidと関連して覚えたいC#の重要キーワード

voidを正しく理解するには、関連するC#のキーワードも一緒に覚えると効果的です。

特に、returnstaticMainasyncvoidと一緒に登場することが多いです。

7-1. returnとの関係

returnは、メソッドの処理を終了したり、戻り値を返したりするために使うキーワードです。

戻り値ありメソッドでは、returnで値を返します。

C#
int GetScore()
{
return 100;
}

この場合、return 100;によってint型の値を返しています。

一方、voidメソッドでは値を返せません。

C#
void ShowScore()
{
Console.WriteLine(100);
}

ただし、voidメソッドでも処理を途中で終了するためにreturn;を使えます。

C#
void ShowScore(int score)
{
if (score < 0)
{
Console.WriteLine("不正な点数です");
return;
}

Console.WriteLine(score);
}

このように、returnは戻り値ありメソッドでは「値を返す」、voidメソッドでは「処理を終了する」という使い方になります。

7-2. staticとの関係

staticは、クラスから直接呼び出せるメンバーを表すキーワードです。

static voidという形は、C#の入門コードでよく出てきます。

C#
static void Main()
{
Console.WriteLine("Hello");
}

ここでのstaticvoidは、それぞれ別の意味を持っています。

staticは、インスタンスを作らずに使えることを表します。

voidは、戻り値がないことを表します。

たとえば、次のようなメソッドも書けます。

C#
static void ShowMessage()
{
Console.WriteLine("メッセージ");
}

これは、「インスタンスを作らずに呼び出せる、戻り値なしのメソッド」です。

staticvoidはセットで覚えがちですが、意味はまったく別です。

7-3. Mainメソッドとの関係

Mainメソッドは、C#プログラムの実行開始地点です。

C#
static void Main()
{
Console.WriteLine("プログラム開始");
}

このMainメソッドが実行されることで、プログラムが始まります。

初心者向けのサンプルでは、static void Main()という形がよく使われます。

ただし、Mainメソッドは必ずvoidでなければならないわけではありません。

次のように、intを返す形もあります。

C#
static int Main()
{
return 0;
}

また、非同期処理を使う場合は次のような形もあります。

C#
static async Task Main()
{
await Task.Delay(1000);
}

最初はstatic void Main()を基本形として覚え、慣れてきたら他の形も学ぶとよいでしょう。

7-4. async voidとasync Taskの違い

C#では、非同期処理を書くときにasyncを使います。

そのとき、async voidという書き方を見ることがあります。

C#
async void Button_Click(object sender, EventArgs e)
{
await Task.Delay(1000);
Console.WriteLine("完了");
}

async voidは、主にイベントハンドラーで使われます。

ただし、通常の非同期メソッドでは、async voidよりもasync Taskを使うのが一般的です。

C#
async Task LoadDataAsync()
{
await Task.Delay(1000);
Console.WriteLine("データ読み込み完了");
}

async Taskにすると、呼び出し元が処理の完了を待ったり、例外を扱ったりしやすくなります。

C#
await LoadDataAsync();

一方、async voidは呼び出し元が完了を待ちにくく、例外処理も難しくなる場合があります。

そのため、イベントハンドラーなど特別な場面を除いて、非同期メソッドではasync Taskを使うのが基本です。

8. voidを使うべきか迷ったときの判断ポイント

C#でメソッドを書くときに、voidにするか戻り値ありにするか迷うことがあります。

その場合は、メソッドの目的と、処理結果をあとで使うかどうかを考えると判断しやすくなります。

8-1. 処理結果を後で使うなら戻り値ありにする

メソッドの処理結果をあとで使いたい場合は、戻り値ありメソッドにします。

たとえば、合計金額を計算する処理です。

C#
int CalculateTotal(int price, int count)
{
return price * count;
}

このように戻り値を返せば、結果を変数に代入できます。

C#
int total = CalculateTotal(500, 4);
Console.WriteLine(total);

さらに、計算結果を別の処理に使えます。

C#
int total = CalculateTotal(500, 4);
int taxIncluded = (int)(total * 1.1);

このように、結果を再利用する可能性があるなら、voidではなく戻り値ありにするのがおすすめです。

8-2. 処理を実行するだけならvoidを使う

処理を実行すること自体が目的なら、voidを使います。

たとえば、メッセージを表示する処理です。

C#
void ShowErrorMessage()
{
Console.WriteLine("エラーが発生しました");
}

このメソッドは、エラーメッセージを表示することが目的です。

表示した結果を呼び出し元で使う必要がないため、voidで問題ありません。

ログ出力やファイル保存なども、処理を実行することが目的ならvoidが使われることがあります。

C#
void WriteLog(string message)
{
Console.WriteLine("[LOG] " + message);
}

8-3. 副作用の有無で考える

voidメソッドは、副作用がある処理で使われることが多いです。

副作用とは、メソッドの外側に何らかの影響を与えることです。

たとえば、次のような処理です。

C#
void UpdateName(User user, string newName)
{
user.Name = newName;
}

このメソッドは戻り値を返しませんが、userオブジェクトの状態を変更しています。

また、次のような処理も副作用があります。

C#
void PrintLog(string message)
{
Console.WriteLine(message);
}

画面に表示することも、プログラムの外側に影響を与える処理です。

副作用がある処理ではvoidが使われやすいですが、何でもvoidにすると処理結果が追いにくくなることがあります。

「このメソッドは何を変更するのか」「戻り値で返したほうがわかりやすくないか」を考えることが大切です。

8-4. 初心者向けの使い分け早見表

voidを使うべきか迷ったときは、次のように考えると判断しやすくなります。

やりたいことおすすめ
画面に文字を表示するvoidShowMessage()
ログを出力するvoidWriteLog()
オブジェクトの状態を変更するvoidまたは戻り値ありUpdateUser()
数値を計算して使う戻り値ありCalculateTotal()
文字列を作って使う戻り値ありCreateMessage()
true/falseで判定する戻り値ありIsAdult()
ファイルに保存するvoidまたは成功可否を返すSaveFile()
非同期処理を行う基本はTaskLoadDataAsync()

初心者のうちは、「結果を使うなら戻り値あり」「実行するだけならvoid」と覚えるとよいでしょう。

ただし、実務ではエラー処理やテストのしやすさも考えて、戻り値を返す設計にすることがあります。

9. C#のvoidに関するよくある質問

最後に、C#のvoidについて初心者が疑問に感じやすい点をQ&A形式で解説します。

9-1. voidは型なのか

C#のvoidは、メソッドが値を返さないことを表すキーワードです。

intstringのように変数を作って値を入れるための型とは扱いが異なります。

たとえば、次のようにvoid型の変数を作ることはできません。

C#
// エラー
// void value;

メソッドの戻り値の位置で使われる特別なキーワードとして理解するとよいでしょう。

C#
void ShowMessage()
{
Console.WriteLine("Hello");
}

この場合、ShowMessageは戻り値を返さないメソッドです。

9-2. voidメソッドはreturnを書かなくてもよいのか

はい、voidメソッドでは通常、returnを書かなくても問題ありません。

C#
void ShowMessage()
{
Console.WriteLine("こんにちは");
}

このメソッドは、最後まで処理が進むと自動的に終了します。

ただし、途中で処理を終わらせたい場合はreturn;を書くことがあります。

C#
void PrintName(string name)
{
if (name == null)
{
return;
}

Console.WriteLine(name);
}

この場合、namenullならそこで処理を終了します。

voidメソッドでは、値を返すreturn 値;は使えませんが、処理を終わらせるreturn;は使えます。

9-3. voidとnullの違いは何か

voidnullはまったく別のものです。

voidは、メソッドが戻り値を返さないことを表します。

C#
void Show()
{
Console.WriteLine("表示");
}

一方、nullは、参照型の変数などが何も参照していない状態を表します。

C#
string name = null;

voidはメソッドの戻り値に関するキーワードで、nullは値の状態を表すものです。

また、voidメソッドはnullを返しているわけではありません。そもそも何も返していない、という点が重要です。

9-4. voidメソッドは値をまったく扱えないのか

いいえ、voidメソッドでも値を扱うことはできます。

voidは「値を返さない」という意味であり、「値を使えない」という意味ではありません。

たとえば、次のように引数で値を受け取れます。

C#
void PrintMessage(string message)
{
Console.WriteLine(message);
}

呼び出し側では、文字列を渡せます。

C#
PrintMessage("こんにちは");

また、メソッドの中で変数を使うこともできます。

C#
void ShowTotal(int price, int count)
{
int total = price * count;
Console.WriteLine(total);
}

このように、voidメソッドでも引数や変数を扱えます。

ただし、処理結果を呼び出し元に返すことはできません。

9-5. async voidはなぜ注意が必要なのか

async voidは、非同期処理で使える書き方ですが、通常のメソッドでは注意が必要です。

C#
async void LoadData()
{
await Task.Delay(1000);
Console.WriteLine("完了");
}

async voidは戻り値がないため、呼び出し元が処理の完了を待ちにくくなります。

また、例外が発生したときの扱いも難しくなることがあります。

そのため、イベントハンドラーを除いて、非同期メソッドでは基本的にasync Taskを使います。

C#
async Task LoadDataAsync()
{
await Task.Delay(1000);
Console.WriteLine("完了");
}

この形なら、呼び出し元でawaitできます。

C#
await LoadDataAsync();

初心者のうちは、「非同期メソッドは基本的にasync Task、イベント処理ではasync voidが使われることがある」と覚えておくとよいでしょう。

まとめ

C#のvoidは、メソッドが戻り値を返さないことを表すキーワードです。

voidメソッドは、画面に文字を表示する、ログを出力する、ファイルに保存する、オブジェクトの状態を変更する、イベント処理を行うといった場面でよく使われます。

一方で、計算結果や判定結果をあとで使いたい場合は、voidではなくintstringboolなどの戻り値ありメソッドにする必要があります。

特に初心者が注意したいのは、voidメソッドの結果は変数に代入できないこと、voidメソッドでreturn 値;は書けないこと、voidnullは別物であることです。

判断に迷ったときは、次のように考えるとわかりやすいです。

処理を実行するだけならvoidを使います。

処理結果をあとで使うなら戻り値ありメソッドにします。

C#のvoidは基本的なキーワードですが、メソッド設計の考え方にもつながる重要な要素です。まずは「戻り値がない」という意味をしっかり理解し、処理の目的に合わせてvoidと戻り値ありメソッドを使い分けられるようになりましょう。