基礎構文には、変数の宣言、データ型、演算子、制御構造、ループ、メソッド、クラス、オブジェクトなどが含まれます。変数はデータを格納するために使用され、データ型はその変数が保持できるデータの種類を定義します。
制御構造には、条件分岐を行うif文やswitch文、繰り返し処理を行うforループやwhileループがあります。メソッドは特定の機能を実行するコードのブロックで、クラスはオブジェクトの設計図として機能します。
これらの基礎構文を理解することで、C#でのプログラミングがより効率的に行えるようになります。
データ型
using System;
class Program
{
static void Main()
{
// 値型の例: 整数型
int valueType = 10;
Console.WriteLine("値型の値: " + valueType);
// 参照型の例: 配列
int[] referenceType = new int[] { 1, 2, 3 };
Console.WriteLine("参照型の値: " + string.Join(", ", referenceType));
// nullable型の例
int? nullableType = null;
Console.WriteLine("nullable型の値: " + nullableType);
}
}
C#のデータ型は大きく分けて値型と参照型の2つのカテゴリーに分類されます。
値型には整数型や浮動小数点型、構造体、列挙型などが含まれ、メモリ上に直接データを保持します。
参照型にはクラス、インターフェース、配列、デリゲートなどがあり、メモリ上のデータへの参照を保持します。
これにより、C#は効率的なメモリ管理とパフォーマンスを提供します。
また、C#にはnullable型もあり、値型にnullを許容することができます。
変数
using System;
class Program
{
// メインメソッドの開始
static void Main()
{
// 値型の変数を宣言し、初期化
int valueType = 10;
Console.WriteLine("値型の変数: " + valueType);
// 参照型の変数を宣言し、初期化
string referenceType = "Hello, World!";
Console.WriteLine("参照型の変数: " + referenceType);
// 配列も参照型の一例
int[] numbers = { 1, 2, 3 };
Console.WriteLine("配列の要素: " + numbers[0]);
}
}
C#の変数は、データを格納するための基本的な要素であり、いくつかのカテゴリーに分類されます。
主なカテゴリーには、値型と参照型があります。値型には、整数型や浮動小数点型、ブール型などが含まれ、メモリ上に直接データを格納します。
参照型には、クラスや配列、デリゲートなどがあり、メモリ上のデータへの参照を格納します。
また、変数はスコープやライフタイムによっても分類され、ローカル変数、インスタンス変数、静的変数などがあります。
これらのカテゴリーは、プログラムの効率性やメモリ管理に影響を与えるため、適切な選択が重要です。
演算子
using System;
class Program
{
static void Main()
{
int a = 10; // 変数aに10を代入
int b = 5; // 変数bに5を代入
// 算術演算子の使用
int sum = a + b; // 加算
Console.WriteLine("Sum: " + sum);
// 比較演算子の使用
bool isEqual = (a == b); // 等価比較
Console.WriteLine("a and b are equal: " + isEqual);
// 論理演算子の使用
bool result = (a > b) && (b > 0); // 論理積
Console.WriteLine("a is greater than b and b is positive: " + result);
}
}
C#の演算子は、プログラミングにおいて様々な操作を行うために使用され、いくつかのカテゴリーに分類されます。
算術演算子は、加算、減算、乗算、除算などの基本的な数学操作を行います。
比較演算子は、値を比較し、等しいかどうか、または大小関係を評価します。
論理演算子は、ブール値を操作し、論理積、論理和、否定などを実行します。
代入演算子は、変数に値を割り当てるために使用されます。
ビット演算子は、ビットレベルでの操作を可能にし、シフトやビットごとの論理演算を行います。
これらの演算子は、C#プログラムの制御フローやデータ操作において重要な役割を果たします。
数値処理
using System;
class Program
{
static void Main()
{
// 整数型の変数を宣言
int a = 10;
int b = 3;
// 四則演算の例
int sum = a + b; // 加算
int difference = a - b; // 減算
int product = a * b; // 乗算
double quotient = (double)a / b; // 除算(型変換を使用)
// 結果を出力
Console.WriteLine($"Sum: {sum}, Difference: {difference}, Product: {product}, Quotient: {quotient}");
}
}
C#の数値処理は、数値型のデータを操作するための機能を提供します。
主な数値型には、整数型のint
、long
、浮動小数点型のfloat
、double
、高精度のdecimal
があります。
これらの型は、四則演算、比較、型変換などの基本的な操作をサポートしています。
また、Math
クラスを使用することで、平方根や三角関数、対数などの高度な数学的計算も可能です。
数値処理は、アプリケーションのパフォーマンスや精度に直接影響を与えるため、適切な型選択と処理方法が重要です。
文字列
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
// 文字列の宣言
string original = "Hello, World!";
// 文字列の結合
string greeting = original + " Welcome to C# programming.";
Console.WriteLine(greeting);
// 文字列の置換
string replaced = greeting.Replace("World", "Universe");
Console.WriteLine(replaced);
// 正規表現を使用したパターンマッチング
Regex regex = new Regex(@"\bC#\b");
bool containsCSharp = regex.IsMatch(replaced);
Console.WriteLine("Contains 'C#': " + containsCSharp);
}
}
C#では、文字列は重要なデータ型であり、さまざまな操作が可能です。文字列は不変であり、一度作成されると変更できません。
文字列の操作には、結合、分割、検索、置換などがあります。これらの操作は、String
クラスやStringBuilder
クラスを使用して行います。
また、文字列のフォーマットやエンコーディングも重要な要素です。C#では、string.Format
メソッドや補間文字列を使用して、効率的に文字列を操作できます。
正規表現を用いた高度な文字列操作も可能で、Regex
クラスを使用してパターンマッチングを行います。
制御構造
using System;
class Program
{
static void Main()
{
// 変数の初期化
int number = 5;
// 条件分岐: numberが5であればメッセージを表示
if (number == 5)
{
Console.WriteLine("Number is five.");
}
// ループ: 0から4までの数を表示
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Current number: " + i);
}
}
}
C#の制御構造は、プログラムの流れを制御するための重要な要素です。主に条件分岐、ループ、ジャンプの3つのカテゴリーに分類されます。
条件分岐には、if文、switch文があり、特定の条件に基づいて異なるコードブロックを実行します。
ループには、for文、foreach文、while文、do-while文があり、特定の条件が満たされるまでコードを繰り返し実行します。
ジャンプには、break文、continue文、return文、goto文があり、プログラムの実行を特定の位置に移動させます。
これらの制御構造を適切に使用することで、効率的で読みやすいコードを書くことが可能です。
配列・コレクション
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 配列の宣言と初期化
int[] numbers = { 1, 2, 3, 4, 5 };
// 配列の要素にアクセスして表示
Console.WriteLine("配列の要素: " + numbers[2]); // 出力: 3
// Listコレクションの宣言と初期化
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };
// Listに要素を追加
fruits.Add("Date");
// Listの要素をループで表示
foreach (var fruit in fruits)
{
Console.WriteLine("フルーツ: " + fruit);
}
}
}
C#の配列とコレクションは、データを格納し操作するための基本的なデータ構造です。
配列は固定サイズで、同じ型の要素を連続して格納します。宣言時にサイズを指定し、インデックスを使用して要素にアクセスします。
一方、コレクションはサイズが動的に変化し、異なる型の要素を格納できるものもあります。代表的なコレクションには、List、Dictionary、Queue、Stackなどがあります。
これらはSystem.CollectionsやSystem.Collections.Generic名前空間に含まれ、データの追加、削除、検索などの操作を効率的に行うためのメソッドが提供されています。
クラス
using System;
// Animalクラスの定義
public class Animal
{
// フィールド: 名前
private string name;
// コンストラクタ: 名前を設定
public Animal(string name)
{
this.name = name;
}
// メソッド: 名前を取得
public string GetName()
{
return name;
}
}
// メインクラス
public class Program
{
public static void Main()
{
// Animalオブジェクトの作成
Animal dog = new Animal("Buddy");
// 名前を出力
Console.WriteLine(dog.GetName());
}
}
C#のクラスは、オブジェクト指向プログラミングの基本構造であり、データとメソッドをまとめて扱うためのテンプレートです。
クラスは、フィールド、プロパティ、メソッド、イベントなどを含むことができ、これらを通じてデータのカプセル化と操作を行います。
クラスは、アクセス修飾子によってその可視性を制御でき、public、private、protectedなどがあります。
また、クラスは継承を通じて他のクラスの機能を拡張することができ、ポリモーフィズムを実現します。
抽象クラスやインターフェースを使用することで、より柔軟で再利用可能なコードを設計することが可能です。
メソッド
using System;
class Program
{
// 静的メソッド: クラス名で直接呼び出せる
static void StaticMethod()
{
Console.WriteLine("This is a static method.");
}
// インスタンスメソッド: オブジェクトを生成して呼び出す
void InstanceMethod()
{
Console.WriteLine("This is an instance method.");
}
static void Main(string[] args)
{
// 静的メソッドの呼び出し
StaticMethod();
// インスタンスメソッドの呼び出し
Program program = new Program();
program.InstanceMethod();
}
}
C#のメソッドは、特定のタスクを実行するためのコードブロックであり、主に4つのカテゴリーに分類されます。
まず、インスタンスメソッドは特定のオブジェクトに関連付けられ、オブジェクトの状態を操作します。
次に、静的メソッドはクラスに関連付けられ、オブジェクトを生成せずに呼び出すことができます。
抽象メソッドは、派生クラスで具体的に実装される必要があるメソッドです。
最後に、仮想メソッドは、派生クラスでオーバーライド可能なメソッドで、ポリモーフィズムを実現します。
これらのメソッドは、C#プログラムの柔軟性と再利用性を高めるために重要です。
コメント
using System;
namespace CommentExample
{
class Program
{
static void Main(string[] args)
{
// これはシングルラインコメントです。
// 次の行でHello, World!をコンソールに出力します。
Console.WriteLine("Hello, World!");
/*
* これはマルチラインコメントです。
* 複数行にわたってコメントを記述することができます。
* ここでは、プログラムの概要や注意点を説明するのに役立ちます。
*/
/// <summary>
/// このメソッドはプログラムのエントリーポイントです。
/// </summary>
/// <remarks>
/// XMLドキュメントコメントは、コードのドキュメントを生成する際に使用されます。
/// </remarks>
static void ExampleMethod()
{
// メソッドの内容をここに記述します。
}
}
}
}
C#では、コードの可読性を向上させるためにコメントを使用します。コメントには主に3つのカテゴリーがあります。
1つ目はシングルラインコメントで、コードの行末に//
を使用して記述します。
2つ目はマルチラインコメントで、/*
と*/
で囲むことで複数行にわたるコメントを作成できます。
3つ目はXMLドキュメントコメントで、///
を使用してメソッドやクラスの説明を記述し、ドキュメント生成ツールで利用されます。
これらのコメントを適切に使うことで、コードの理解が容易になります。
名前空間
using System; // 標準のSystem名前空間を使用
// 独自の名前空間を定義
namespace MyApplication.Utilities
{
// クラスを定義
class MathHelper
{
// メソッドを定義
public static int Add(int a, int b)
{
return a + b; // 2つの整数を加算して返す
}
}
}
class Program
{
static void Main()
{
// MyApplication.Utilities名前空間のMathHelperクラスを使用
int result = MyApplication.Utilities.MathHelper.Add(5, 3);
Console.WriteLine(result); // 結果を出力: 8
}
}
C#の名前空間は、クラスやインターフェース、デリゲート、列挙型などの型を整理し、論理的にグループ化するための機能です。
名前空間を使用することで、同じ名前のクラスやメソッドが異なるコンテキストで使用される際の競合を避けることができます。
名前空間は、通常、ドットで区切られた階層構造を持ち、例えば、System.Collections.Generic
のように記述されます。
これにより、コードの可読性と管理性が向上し、大規模なプロジェクトでも効率的に開発を進めることが可能です。
LINQ
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// サンプルデータのリストを作成
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQを使用して偶数をフィルタリング
var evenNumbers = numbers.Where(n => n % 2 == 0);
// 結果を出力
Console.WriteLine("偶数:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
LINQ(Language Integrated Query)は、C#におけるデータ操作のための強力な機能です。
LINQは、コレクションやデータベース、XMLなどの異なるデータソースに対して統一されたクエリ構文を提供します。
LINQのカテゴリーには、LINQ to Objects、LINQ to SQL、LINQ to XML、LINQ to Entitiesなどがあります。
これらのカテゴリーは、それぞれ異なるデータソースに対して最適化されており、開発者は一貫した方法でデータを操作できます。
LINQを使用することで、コードの可読性が向上し、データ操作がより直感的になります。
例外処理
using System;
class Program
{
static void Main()
{
try
{
// 配列の宣言
int[] numbers = { 1, 2, 3 };
// 存在しないインデックスにアクセスし、例外を発生させる
Console.WriteLine(numbers[3]);
}
catch (IndexOutOfRangeException ex)
{
// 例外が発生した場合の処理
Console.WriteLine("インデックスが範囲外です: " + ex.Message);
}
finally
{
// 例外の有無にかかわらず実行される処理
Console.WriteLine("プログラム終了");
}
}
}
C#の例外処理は、プログラムの実行中に発生するエラーを管理するための重要な機能です。
例外は、通常のプログラムの流れを中断し、エラーを処理するための特別なコードブロックに制御を移します。
例外は、主にシステム例外とアプリケーション例外の2つのカテゴリーに分類されます。
システム例外は、.NETランタイムによってスローされるもので、NullReferenceExceptionやIndexOutOfRangeExceptionなどがあります。
一方、アプリケーション例外は、開発者が特定のアプリケーションのニーズに応じて定義するカスタム例外です。
これにより、エラーの種類に応じた適切な処理が可能になります。