C#: 基本的な構文
1. プログラムの構成
典型的な C# プログラムは、using ディレクティブ、namespace、class、および Main メソッドで構成されています。
- using ディレクティブ:名前空間をインポートするため、完全修飾パスを記述する必要がなくなります
- 名前空間:コードを整理し、命名上の競合を防ぐための論理的なコンテナ
- クラス:C# はオブジェクト指向言語であるため、すべてのコードはクラス内に記述する必要があります
- mainメソッド:プログラムの実行が開始されるエントリポイント
▶ サンプル
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
Hello, World!
2. 文とセミコロン
C# では、すべての文の末尾にセミコロン ; を付ける必要があります。セミコロンは文の終端記号であり、コンパイラに対してその文がどこで終わるかを示します。セミコロンが欠けていると、コンパイルエラーが発生します。
▶ サンプル
using System;
namespace StatementDemo
{
class Program
{
static void Main()
{
int x = 10;
int y = 20;
int sum = x + y;
Console.WriteLine(sum);
}
}
}
30
3. コードブロックと中括弧
コードブロックは中括弧 { } で囲まれ、複数の文を単一の論理単位としてまとめる。名前空間、クラス、メソッド、条件分岐、ループはすべてコードブロックを必要とする。中括弧はネストすることができる。
namespace Outer
{
namespace Inner
{
class MyClass
{
void MyMethod()
{
if (true)
{
Console.WriteLine("nested block");
}
}
}
}
}
4. インデントとコードスタイル
適切なインデントは、コードの可読性を高めます。C#コミュニティでは、インデントに4スペースを使用することを推奨しています。波括弧の書き方には、主に2つのスタイルがあります:
- オールマン・スタイル:開く中括弧を単独の行に記述する(C#で一般的)
- K&Rスタイル:前の行の末尾に開括弧を置く
class StyleA
{
void Method()
{
Console.WriteLine("Allman style");
}
}
class StyleB {
void Method() {
Console.WriteLine("K&R style");
}
}
ヒント:Visual Studio では、デフォルトでオールマン・スタイルが採用されています。最も重要なのは、プロジェクト内での一貫性です。
5. コンソール出力
Console.Write および Console.WriteLine は、コンソールにテキストを出力するために使用されます:
- Console.Write: 末尾に改行を付けずにテキストを出力します
- Console.WriteLine: テキストを出力し、その後に改行を挿入する
▶ サンプル
using System;
namespace ConsoleDemo
{
class Program
{
static void Main()
{
Console.Write("Hello");
Console.Write(" ");
Console.WriteLine("World");
Console.WriteLine("Second line");
}
}
}
Hello World
Second line
6. エスケープ文字
文字列内の特定の文字は、正しく表示されるように、バックスラッシュ \ でエスケープする必要があります:
| エスケープシーケンス | 意味 |
|---|---|
\n |
改行 |
\t |
タブ |
\\ |
バックスラッシュ |
\" |
ダブルクォート |
\' |
単一引用符 |
▶ サンプル
using System;
namespace EscapeDemo
{
class Program
{
static void Main()
{
Console.WriteLine("Line1\nLine2");
Console.WriteLine("Name\tAge");
Console.WriteLine("Path: C:\\Users\\Doc");
Console.WriteLine("He said \"Hello\"");
}
}
}
Line1
Line2
Name Age
Path: C:\Users\Doc
He said "Hello"
警告:文字列に多くのバックスラッシュが含まれている場合(ファイルパスなど)、リテラル文字列
@"..."を使用してください。これにより、\のエスケープ処理が不要になります。
7. コメント
コメントは開発者向けの注記であり、コンパイラによって無視されます。C# では、次の 3 種類のコメントがサポートされています。
//: 1行のコメント。//の後の部分からその行の終わりまでの内容はすべて無視されます/* */: 複数行にわたるコメント。複数行にまたがって記述可能///: XMLドキュメントコメント。APIドキュメントを生成可能
using System;
namespace CommentDemo
{
class Program
{
static void Main()
{
Console.WriteLine("hello");
Console.WriteLine("world");
/*
Console.WriteLine("skipped");
Console.WriteLine("also skipped");
*/
Console.WriteLine("end");
}
/// <summary>
/// Calculate the sum of two numbers
/// </summary>
static int Add(int a, int b)
{
return a + b;
}
}
}
hello
world
end
ヒント: XMLドキュメントコメント(
///)は、公開APIでよく使用されます。Visual Studioでは、メソッドが呼び出された際にこれらの説明が表示されます。
8. トップレベルの文
C# 9 以降では、トップレベル文 を使用することで、定型的な namespace、class、Main といったコードを省略し、ファイルの最上位レベルで直接ロジックを記述できるようになりました。コンパイラが自動的にエントリメソッドを生成します。
▶ サンプル
using System;
Console.WriteLine("Top-level statement!");
int result = 40 + 2;
Console.WriteLine($"The answer is {result}");
Top-level statement!
The answer is 42
ヒント:トップレベル文は、1つのプロジェクトにつき1つのファイルでのみ使用できます。複数のファイルで使用すると、コンパイルエラーが発生します。
9. ファイルスコープのネームスペース
C# 10 以降では、ファイルスコープのネームスペースにより、従来のブロック形式のネームスペースの代わりに namespace MyApp; を使用できるようになり、ネストが 1 レベル減ります:
namespace MyApp;
class Program
{
static void Main()
{
Console.WriteLine("File-scoped namespace");
}
}
これは、次の式と同等です:
namespace MyApp
{
class Program
{
static void Main()
{
Console.WriteLine("File-scoped namespace");
}
}
}
ヒント:ファイルスコープのネームスペースを使用するとコードがより簡潔になるため、新しいプロジェクトではこの方式の使用をお勧めします。
❓ よくある質問
📖 まとめ
- C# プログラムは、using ディレクティブ、名前空間、クラス、および Main メソッドで構成される
- すべての文はセミコロンで終わらなければならない
- コードブロックは中括弧で囲まれ、ネストすることができます
- Console.Write では改行が挿入されませんが、Console.WriteLine では挿入されます
- エスケープ文字にはバックスラッシュを接頭辞として付けます。リテラル文字列
@"..."ではエスケープ処理が行われません。 - 3種類のコメントタイプ:1行コメント
//、複数行コメント/* */、XMLドキュメント/// - トップレベルステートメント(C# 9以降)により、エントリポイントのコードが簡素化されます
- ファイルスコープのネームスペース(C# 10以降)により、ネストの階層が浅くなる
📝 練習問題
- Console.Write および Console.WriteLine を使用して、自分の名前と年齢を出力するコンソールプログラムを作成してください
- エスケープ文字を使用して、1つの Console.WriteLine ステートメントで3行のテキストを出力する
- トップレベル文を用いて、古典的なプログラム構造を書き直す
- メソッドにXMLドキュメントコメントを追加し、
<summary>および<param>タグを含める