Skip to content

Instantly share code, notes, and snippets.

@KentaYamada
Created January 8, 2014 11:16
Show Gist options
  • Save KentaYamada/8315304 to your computer and use it in GitHub Desktop.
Save KentaYamada/8315304 to your computer and use it in GitHub Desktop.
インスタンスオブジェクトとスタティックオブジェクトの違い(Written by C#) 「インスタンスオブジェクト」 newキーワードによってインスタンス化されたクラスをメモリをヒープ領域へ割り当てる。 インスタンス化された領域ごとに値を持つため、目的のオブジェクトの情報へアクセスする場合はオブジェクト経由でアクセスすることになる。 「スタティックオブジェクト」 インスタンス化できない固有のオブジェクト。 メンバーへのアクセスはクラスから直接行う。同じくヒープ領域へと割り当てられるが、インスタンスオブジェクトとは違い、システムが開始されたと同時にオブジェクトが作られ、終了するまで存在している。
using System;
class MainProgram
{
static void Main()
{
//インスタンス化されたクラスは、オブジェクト毎に情報を保持する。
var instance1 = new InstanceObject();
instance1.Name = "Yamada";
var instance2 = new InstanceObject();
instance2.Name = "Suzuki";
Console.WriteLine(instance1.Name); //Yamada
Console.WriteLine(instance2.Name); //Suzuki
StaticObject.Name = "Yamada";
//ここでは仮に別オブジェクトからアクセスされたと思って下さい。
StaticObject.Name = "Suzuki";
//固有クラスに直接アクセスして値を書き換えるので、値が変更されてしまう。
//Static Class = 共有オブジェクトだというイメージだとわかりやすいかも
Console.WriteLine(StaticObject.Name); //Suzuki
}
}
class InstanceObject
{
public string Name{ get; set; }
}
static class StaticObject
{
//スタティッククラスを定義する場合、メンバーは必ず「static」キーワードを付けなければエラーとなる
public static string Name{ get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment