특정 개체가 아니라 형식 자체에 속하는
정적 맴버를 정의 할 수 있다.
정적 맴버
프로그램이 실행되는 동안 수명이 유지됨
항상 클래스 이름으로 접근됨
생성된 인스턴스의 수와 상관 없이
정적 맴버는 항상 한 개
정적 메서드는 비정적 필드 및 메서드에 접근 불가
그렇기 때문에 그 동안 Main메서드에서 비정적 메서드를 호출 하거나
맴버에 엑세스 하기 위해 static을 붙여왔다.
정적 생성자는 정적 필드를 초기화 하거나 특정 작업을 한 번만 수행해야 하는데 사용됨
정적 생성자는 인스턴스 생성자보다 먼저 호출되며 한번만 실행됨
생성자란?
클래스와 같은 이름을 갖는 함수를 의미
객체가 초기에 생성될 때 자동으로 1회 호출되는 함수
주로 객체 내의 정보를 초기화 하는 수단이며, return 값이 없다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step35
{
internal class CallCenter
{
//정적 생성자
static CallCenter()
{
Console.WriteLine("콜센터 정적 생성자");
}
//인스턴스 생성자
public CallCenter()
{
Console.WriteLine("콜센터 인스턴스 생성자");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step35
{
internal class Program
{
static void Main(string[] args)
{
var center1 = new CallCenter();
var center2 = new CallCenter();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step35
{
internal class Program
{
static void Main(string[] args)
{
var center1 = new CallCenter(201); //인스턴스 생성시 인수 값(내선번호) 전달
var center2 = new CallCenter(202);
Console.WriteLine(CallCenter.number); //정적 맴버는 클래스 이름으로 엑세스
//정적 메서드 호출
CallCenter.Call();
//인스턴스 메서드 호출
center1.CallExtensionNumber(); //변수에 할당된 CallCenter인스턴스의 맴버 메서드 호출
center2.CallExtensionNumber();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step35
{
internal class CallCenter
{
//정적 맴버 변수
public static string number;
//인스턴스 맴버 변수
public int extenstionNumber;
//정적 생성자
static CallCenter()
{
//정적 생성자에서 정적 필드(맴버변수)를 초기화 할 수 있다.
CallCenter.number = "1588-0000";
Console.WriteLine("콜센터 정적 생성자");
}
//인스턴스 생성자
public CallCenter(int extenstionNumber) //매개변수로 내선번호 전달
{
//this 키워드를 사용해 클래스의 현재 인스턴스의 맴버변수에 접근(맴버 엑세스 연산자 사용, .점 연산자)
this.extenstionNumber = extenstionNumber;
Console.WriteLine("콜센터 인스턴스 생성자");
Console.WriteLine("내선번호 : {0}", this.extenstionNumber); //생성된 인스턴스는 다른 내선번호를 가지게 만듬
}
//정적 맴버 메서드
public static void Call()
{
Console.WriteLine("상담 가능한 상담사를 찾고있습니다.");
}
//인스턴스 맴버 메서드(내선번호로 전화 걸기)
public void CallExtensionNumber()
{
Console.WriteLine("내선번호({0})로 전화를 겁니다.", this.extenstionNumber);
}
}
}
'Study > C#' 카테고리의 다른 글
[C#] virtual, override (0) | 2024.06.12 |
---|---|
[C#] 상속 (1) | 2024.06.03 |
[C#] this 키워드 (0) | 2024.05.31 |
[C#] 점연산자 NullReferenceException (0) | 2024.05.30 |
[C#] 맴버변수와 지역변수 (0) | 2024.05.29 |