###クラス###
修飾子 | 概要 |
---|---|
public | すべてのクラスからアクセス可能 |
internal | 同じアセンブリ内からのみアクセス可能 |
abstract | 抽象メンバーを指定 |
static | 静的メンバーを指定 |
sealed | 他クラスから継承できない |
アセンブリとは、ビルドによって出来上がった実行可能なファイルのこと(.exe, .dllなど)。Visual Studioでは、基本的に1プロジェクトが1アセンブリとなるため、同一のプロジェクトでアクセス可能とも言い換えることができる。
using System; // using宣言
namespace SelfCSharp // 名前空間
{
public class Person // クラス定義
{
public string firstName; // フィールド定義
public Person() // コンストラクタ
{
}
public string FirstName // プロパティ定義
{
}
public void Show() // メソッド定義
{
}
}
}
フィールド
classブロックの直下で宣言された変数。メンバー変数ともいう。
メソッド
メソッドのオーバーライド
メソッド名は同じで、引数の型や並びが異なるメソッドを複数定義することをメソッドのオーバーロードという。戻り値の型が違うだけではオーバーロードできない。
コンストラクター
インスタンス化したタイミングで呼び出されるメソッド。引数のないコンストラクターのことをデフォルトコンストラクターという。コンストラクターもオーバーロードできる。
別のコンストラクタから初期化したい場合、コンストラクター初期化子を使うことで呼び出せる。
public Person(string name)
{
Console.WriteLine(name);
}
public Person() : this("もち太郎")
{
}
クラスを初期化する場合、オブジェクト初期化子を使うことでも初期化できる。(アクセス可能なメンバーのみ)
var p = new Person()
{
name = "もち太郎",
type = "身軽"
};
フィールドの初期化 → コンストラクタ → オブジェクト初期化子
クラスフィールド・クラスメソッド
インスタンスを生成しなくても直接呼び出せるフィールド・メソッドのこと。インスタンス化していないので this も使えない。
クラス定数
classブロックの直下で定義された定数。
class Test
{
public static readonly string Name = "もち太郎";
public const int Value = 10; // constだけでstatic扱いなのでstaticは不要
}
静的コンストラクタ
初めて呼び出された際に初期化される静的なコンストラクタ。
静的クラス
newできないクラス。
#引数
ref修飾子
refをつけると値ではなく参照を渡す。out修飾子とは違い、変数を初期化してから渡す必要がある。
out修飾子
refと似ているが、outは変数を初期化する必要がない。ただしメソッド内部で割り当てる必要がある。
class MainClass
{
public static void Main(string[] args)
{
int x = 0;
int y;
MyClass.TestFunc(ref x, out y);
Console.WriteLine(x);
Console.WriteLine(y);
}
}
class MyClass
{
public static void TestFunc(ref int x, out int y)
{
y = 2;
}
}
タプル(C#7以降)
返り値を複数持てる。
public static (int max, int min) TestFunc(int x, int y)
{
return (x > y) ? (x, y) : (y, x);
}
匿名型
var test = new {Name = "もち太郎", Price = 1000};
イテレーター
public IEnumerable<string> GetString()
{
yield return "もち太郎";
yield return "ちまき";
}