新しいロールまたはプロジェクトのために Python から C# に移行する場合、この記事は生産性をすばやく向上するのに役立ちます。 Python の使い慣れた内容と C# の違いについて説明します。
C# と Python は同様の概念を共有しています。 これらの使い慣れた構造は、Python を既に知っている場合に C# を学習するのに役立ちます。
- オブジェクト指向: Python と C# はどちらもオブジェクト指向言語です。 構文が異なる場合でも、Python のクラスに関する概念はすべて C# にも当てはまります。
- クロスプラットフォーム: Python と C# はどちらもクロスプラットフォームの言語です。 どちらの言語で作成されたアプリも、多くのプラットフォームで実行できます。
- ガベージ コレクション: どちらの言語も、ガベージ コレクションによる自動メモリ管理を採用しています。 ランタイムは、参照されていないオブジェクトのメモリを再利用します。
- 強い型付け: Python と C# はどちらも強く型付けされた言語です。 強制型変換は暗黙的には行われません。 C# は静的に型付けされるのに対し、Python は動的に型付けされるため、後で説明する違いがあります。
-
Async / Await: Python の と
asyncの機能は、C# のawaitとasyncのサポートから直接触発されています。await -
パターン マッチング: Python の 式とパターン マッチングは、C# の
match式に似ています。switchこれらを使って、複雑なデータ式を検査し、パターンに一致するかどうかを判断します。 -
ステートメントのキーワード: Python と C# は、、
if、else、whileなどの多くのキーワードを共有します。forすべての構文が同じというわけではありませんが、Python を知っていれば C# を読めるほどの十分な類似性があります。
構文の概要
次の例は、いくつかの一般的なパターンを並べて示しています。 これらの比較は完全ではありませんが、構文の違いをすばやく確認できます。
型注釈:
# Python
name: str = "Hello"
count: int = 5
// C#
string name = "Hello";
int count = 5;
リスト フィルタリング (理解力と LINQ):
# Python
result = [x for x in items if x > 5]
// C#
var result = items.Where(x => x > 5).ToList();
詳細情報: LINQ の概要
ブロック スコープ (インデントと中かっこ):
# Python
if count > 0:
print("positive")
// C#
if (count > 0)
{
Console.WriteLine("positive");
}
クラス定義:
# Python
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
// C#
record Point(int X, int Y);
詳細情報: レコード
主な違い
C# を学習すると、C# が Python とは異なる次の重要な概念が見つかります。
-
インデントとトークン: Python では、改行とインデントは第一級の構文要素です。 C# では、空白は重要ではありません。
;の個別のステートメントなどのトークン、他のトークン{および}は、ifおよび他のブロック ステートメントのブロック スコープを制御します。 ただし、読みやすさを考慮して、ほとんどのコーディング スタイル (これらのドキュメントで使われているスタイルを含む) では、インデントを使って、{と}で宣言されたブロック スコープを強化しています。 - 静的型付け: C# では、変数宣言にその型が含まれます。 変数を別の型のオブジェクトに再割り当てすると、コンパイラ エラーが発生します。 Python では、再割り当て時に型を変更できます。
- null 許容型: C# 変数は、"null 許容" または "null 非許容" にすることができます。 null 非許容型とは、null (または nothing) にできない型です。 常に有効なオブジェクトを参照します。 対照的に、null 許容型は、有効なオブジェクトか null のいずれかを参照する可能性があります。
-
LINQ: 統合言語クエリ (LINQ) を構成するクエリ式のキーワードは、Python のキーワードではありません。 ただし、
itertools、more-itertools、py-linqなどの Python ライブラリは同様の機能を提供します。 - ジェネリック: C# ジェネリックは、C# 静的型付けを使って、型パラメーターに指定された引数に関するアサーションを行います。 ジェネリックのアルゴリズムでは、引数の型が満たさなければならない制約を指定する必要がある場合があります。
ヒント
C# の型システム ( class と struct、ジェネリック、インターフェイスなど) の詳細については、「基本」セクションの 「型システム の概要」を参照してください。
最後に、Python の一部の機能は C# では使用できません。
- 構造的型付け (ダック タイピング): C# では、型には名前と宣言があります。 タプルを除き、同じ構造を持つ型は交換可能ではありません。
- REPL: C# には、ソリューションのプロトタイプを迅速に作成するための Read-Eval-Print Loop (REPL) がありません。
-
重要な空白: ブロック スコープを示すには中かっこ と
{を正しく使う必要があります。}
Python を知っていれば、C# を学ぶのはスムーズです。 これらの言語には、使用できる同様の概念と同様のイディオムがあります。
次のステップ
- C# のツアー: すべての C# 機能の概要について説明します。
- 初心者向けチュートリアル: 対話型のレッスンを使用して、C# を段階的に学習します。
- C# で構築できる内容: C# で作成できるアプリケーションの種類を調べる。
- C# の基礎: 型システム、オブジェクト指向プログラミングなどについて詳しく説明します。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET