ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
最小プログラム (C# 9+ top-level)
// Program.cs (C# 9+ top-level statements)
Console.WriteLine("Hello, World!");
int n = 10;
Console.WriteLine($"n = {n}");
従来は次のように書く必要がありました:
using System;
namespace HelloApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
変数宣言と型推論
int n = 10;
string s = "hello";
double pi = 3.14;
bool flag = true;
char c = 'A';
// 型推論 (var)
var name = "Taro"; // string
var list = new List<int>{1, 2, 3}; // List<int>
var dict = new Dictionary<string, int>();
// 定数 (const は コンパイル時定数)
const int MAX = 100;
// 読み取り専用 (実行時に決まる)
readonly DateTime startedAt = DateTime.Now;
文字列補間 ($ プレフィックス)
string name = "Taro";
int age = 30;
// $ で補間
string s1 = $"Hello, {name}! Age = {age}";
// 書式指定
double price = 1234.5;
Console.WriteLine($"price = {price:N2}"); // price = 1,234.50
Console.WriteLine($"date = {DateTime.Now:yyyy/MM/dd}");
// 複数行 (verbatim + 補間)
string sql = $@"
SELECT * FROM users
WHERE name = '{name}'
AND age > {age}";
// C# 11+ raw string literals
string json = $"""
{
"name": "{name}",
"age": {age}
}
""";
null 安全演算子
string? maybeNull = GetName(); // C# 8+ nullable reference types
// ?. null 条件演算子
int? length = maybeNull?.Length; // null なら null
// ?? null 合体演算子
string name = maybeNull ?? "anonymous";
// ??= null 代入演算子
maybeNull ??= "default"; // null の場合だけ代入
// ! null 抑制 (上級者向け)
int len = maybeNull!.Length; // 「null じゃないと断言」
// 例
User? user = await db.FindAsync(id);
string city = user?.Address?.City ?? "unknown";
Pattern Matching (C# 7+)
// is 型パターン
if (obj is string s)
{
Console.WriteLine(s.Length);
}
// switch 式 (C# 8+)
string category = item switch
{
Book b when b.Pages > 1000 => "thick",
Book => "book",
Music m => $"music ({m.Artist})",
null => "none",
_ => "other",
};
// Property pattern (C# 8+)
string description = user switch
{
{ Age: > 18, IsActive: true } => "active adult",
{ Age: <= 18 } => "minor",
_ => "unknown",
};
// List pattern (C# 11+)
int[] arr = { 1, 2, 3 };
if (arr is [1, _, 3]) { /* 真ん中は何でも */ }
records (C# 9+)
// 不変データクラス
public record User(string Name, int Age);
var u = new User("Taro", 30);
Console.WriteLine(u); // User { Name = Taro, Age = 30 }
Console.WriteLine(u == new User("Taro", 30)); // True (値比較)
// with 式で複製しつつ変更
var older = u with { Age = 31 };
// C# 10+ record struct (値型)
public record struct Point(int X, int Y);
init-only setters / required (C# 9+ / 11+)
public class User
{
public required string Name { get; init; } // C# 11+
public int Age { get; init; }
}
// オブジェクト初期化子で設定後は変更不可
var u = new User { Name = "Taro", Age = 30 };
// u.Name = "X"; ❌ コンパイルエラー
// required を忘れるとエラー
var bad = new User { Age = 30 }; // ❌ Name 必須
global using / file-scoped namespace
// GlobalUsings.cs (C# 10+)
global using System;
global using System.Collections.Generic;
global using System.Linq;
// → 全ファイルで自動 using
// MyClass.cs - ファイル全体が namespace 直下
namespace MyApp.Services;
public class UserService
{
// ...
}
Java / Kotlin との比較
| 項目 | C# | Java | Kotlin |
|---|---|---|---|
| 型推論 | var n = 10 | var n = 10 (Java 10+) | val n = 10 |
| 不変 | readonly / init | final | val |
| null 安全 | ?. ?? | Optional | ?. ?: |
| 文字列補間 | $"{x}" | String.format | "${x}" |
| データクラス | record | record (Java 14+) | data class |
| top-level コード | ✅ C# 9+ | ❌ | ✅ |
例外処理
try
{
var content = File.ReadAllText("data.txt");
}
catch (FileNotFoundException ex) when (ex.FileName.EndsWith(".txt"))
{
// when 句で追加条件 (フィルタ)
Console.WriteLine("テキストファイルなし");
}
catch (Exception ex)
{
Console.WriteLine($"エラー: {ex.Message}");
throw; // 再 throw (スタック維持)
}
finally
{
// 必ず実行
}
// using 宣言 (C# 8+)
using var file = File.OpenRead("data.txt");
// メソッド終了時に自動 Dispose
FAQ
Q: var を使うべきか型を書くべきか?
A: マイクロソフト推奨は「右辺から型が自明な場合 var、API 戻り値などで型が不明瞭なら明示」。チーム規約に従う。
Q: string と String どちらを使う?
A: 同じ型のエイリアス。ローカル変数は小文字 string、String.IsNullOrEmpty のようなクラスメソッド呼び出しは大文字、が慣習。
Q: Nullable Reference Types を有効にすべき?
A: 新規プロジェクトでは <Nullable>enable</Nullable> 推奨。NullReferenceException を激減できます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページ
- 文法
- エラー一覧
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?