// <이것은 C#이다> 3판 코드
using System;
namespace thisIsCSharp
{
class MainApp
{
class Instance_Static
{
public int a;
public int b;
public static int c; // 정적 필드
public static int d; // 프로그램 중 유일한 변수
public void print()
{
Console.WriteLine($"{a}, {b}, {c}, {d}");
}
}
static void Main(string[] args)
{
Instance_Static ins1 = new Instance_Static();
// 인스턴스를 만들어서 주면
ins1.a = 1;
ins1.b = 2; // ins1 안에 있는 녀석들만 변화
ins1.print();
Instance_Static.c = 3;
Instance_Static.d = 4;
Console.WriteLine("----------"); // static c, d 변화
ins1.print(); // 라인 지나면서 바뀐 static 값 받음
Instance_Static ins2 = new Instance_Static();
ins2.print(); // static 값만 변화해서 3, 4 들어감
}
}
}
using System;
namespace thisIsCSharp
{
class StaticField
{
public static int Count = 0;
}
class Do_A
{
public Do_A()
{
StaticField.Count++; // 1 더해
}
}
class Do_B
{
public Do_B()
{
StaticField.Count += 2; // 2 더해
}
}
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine($"그냥 뽑으면 : {StaticField.Count}");
new Do_A();
Console.WriteLine($"1 더하고 뽑으면 : {StaticField.Count}");
new Do_A();
Console.WriteLine($"또 더하면 : {StaticField.Count}");
new Do_B();
Console.WriteLine($"거기에 2를 더하면 : {StaticField.Count}");
new Do_B();
Console.WriteLine($"또 2를 더하면 : {StaticField.Count}");
}
}
}
static은 인스턴스가 아닌 클래스 자체에 속해있어 어디서 값을 수정하든 덮어써진다.