コンストラクターとstaticメンバー
コンストラクター(オーバーロードや連鎖を含む)でオブジェクトを構築し、すべてのインスタンスで共有するデータをstaticフィールド/メソッドで扱います。
「コンストラクターとstaticメンバー」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
コンストラクターと static:概要
目標:オブジェクトを安全に構築し、インスタンス間でデータを共有します。
- コンストラクターは必須の状態を設定します
- オーバーロードとthis(...)によるチェーン
- staticフィールドとメソッドはすべてのオブジェクトで共有されます
基本的なコンストラクター
コンストラクターはnewを呼び出したときに実行され、オブジェクトを初期化します。
using System;
// Constructor sets required data on creation
public class User
{
public string Name { get; private set; }
public int Age { get; private set; }
public User(string name, int age)
{
Name = name;
Age = age;
}
}
public class Program
{
public static void Main(string[] args)
{
User u = new User("Ada", 28);
Console.WriteLine(u.Name + " (" + u.Age + ")");
}
}
オーバーロードとチェーン
利便性のためにコンストラクターのオーバーロードを使用し、ロジックを再利用するにはthis(...)を使用します。
using System;
// Overloads let you offer defaults; chain with this(...)
public class Point2D
{
public int X { get; private set; }
public int Y { get; private set; }
public Point2D(int x, int y)
{
X = x; Y = y;
}
public Point2D(int xy) : this(xy, xy) { } // calls the main constructor
}
public class Program
{
public static void Main(string[] args)
{
Point2D p1 = new Point2D(3, 4);
Point2D p2 = new Point2D(5); // becomes (5,5)
Console.WriteLine("p1: " + p1.X + "," + p1.Y);
Console.WriteLine("p2: " + p2.X + "," + p2.Y);
}
}
static メンバー
staticメンバーはすべてのインスタンスで共有されます。static メソッドは型名を使って呼び出します。
using System;
// Static members live on the type (one copy shared)
public class Counter
{
private static int _created = 0; // shared count
public int Id { get; private set; }
public Counter()
{
_created = _created + 1;
Id = _created;
}
public static int CreatedCount()
{
return _created;
}
}
public class Program
{
public static void Main(string[] args)
{
Counter a = new Counter();
Counter b = new Counter();
Console.WriteLine("a.Id=" + a.Id + ", b.Id=" + b.Id);
Console.WriteLine("Total created = " + Counter.CreatedCount());
}
}
static コンストラクターと定数
static コンストラクターは型ごとに一度だけ実行されます。コンパイル時のリテラルにはconstを、実行時に設定する値にはstatic readonlyを使用します。
using System;
public class AppConfig
{
public const string AppName = "Demo"; // compile-time constant
public static readonly DateTime StartedAt; // runtime-initialized once
// Static constructor: runs once before first use of the type
static AppConfig()
{
StartedAt = DateTime.UtcNow;
}
public static string Info()
{
return AppName + " started at " + StartedAt.ToString("u");
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(AppConfig.Info());
Console.WriteLine(AppConfig.Info()); // static ctor ran only once
}
}
ヒント
ヒント:
- コンストラクターは小さく保ち、入力を早い段階で検証します。
- よく使う既定値にはオーバーロードを使用し、1つの主要なコンストラクターにチェーンさせます。
- データが本当に型に属する場合(カウンターやヘルパーなど)にstaticを使用します。
static メンバーの概念
まとめ
まとめ:コンストラクターで必須の状態を設定し、利便性のためにオーバーロードとチェーンを使用します。すべてのオブジェクトで共有するデータやヘルパーにはstaticメンバーを追加します。
よくある質問
「コンストラクターとstaticメンバー」レッスンは無料ですか?
はい。「コンストラクターとstaticメンバー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「コンストラクターとstaticメンバー」で何を学びますか?
コンストラクター(オーバーロードや連鎖を含む)でオブジェクトを構築し、すべてのインスタンスで共有するデータをstaticフィールド/メソッドで扱います。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「コンストラクターとstaticメンバー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フィールド、自動プロパティ、オブジェクト初期化子
- コンストラクターとstaticメンバー
- カプセル化と不変条件