일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 티스토리
- javascript
- 하남
- 내장함수
- 카카오가 찾아준 헤어샵
- 재테크
- 트레커
- MSsql
- 파리바게트 청라 SK점
- 최신트래커
- 국정화
- 토렌트
- C#
- 신장사거리
- 국정화 반대
- 파리바게트
- 하남맛집
- 함수
- 동적쿼리
- Google Map
- 카카오헤어샵
- Lock
- 술안주
- .net
- jquery
- 박근혜 탄핵
- 맛집
- db
- 트래커
- 초대장
- Today
- Total
featur
[C#] Static 한정자 (전역변수) 본문
[C#] Static 한정자 (전역변수)
static(C# 참조)
static
한정자는 특정 개체가 아니라 해당 형식 자체에 속하는 정적 멤버를 선언하는 데 사용됩니다. static
한정자는 클래스, 필드, 메서드, 속성, 연산자, 이벤트 및 생성자와 함께 사용할 수 있지만 클래스 이외의 형식, 소멸자 또는 인덱서와는 함께 사용할 수 없습니다. 자세한 내용은 정적 클래스 및 정적 클래스 멤버를 참조하십시오.
다음 클래스는 static
으로 선언되며 static
메서드만 포함합니다.
static class CompanyEmployee { public static void DoSomething() { /*...*/ } public static void DoSomethingElse() { /*...*/ } }
상수 또는 형식 선언은 암시적으로 정적 멤버입니다.
정적 멤버는 인스턴스를 통해 참조할 수 없으며 대신 형식 이름을 통해 참조됩니다. 예를 들어, 다음 클래스를 확인해 보십시오.
public class MyBaseC { public struct MyStruct { public static int x = 100; } }
정적 멤버 x
를 참조하려면 동일한 범위에서 멤버에 액세스 가능하지 않은 경우 정규화된 이름 MyBaseC.MyStruct.x
을 사용합니다.
Console.WriteLine(MyBaseC.MyStruct.x);
클래스의 인스턴스에는 해당 클래스의 모든 인스턴스 필드에 대한 별도의 복사본이 포함되지만 각 정적 필드의 복사본은 한 개만 있습니다.
this를 사용하여 정적 멤버 또는 속성 접근자를 참조할 수 없습니다.
클래스에 static
키워드가 적용되면 해당 클래스의 모든 멤버가 정적 멤버여야 합니다.
클래스와 정적 클래스는 정적 생성자를 가질 수 있습니다. 정적 생성자는 프로그램이 시작된 후 클래스가 인스턴스되기 전에 호출됩니다.
|
---|
|
정적 멤버를 설명하기 위해 회사의 직원을 나타내는 클래스가 있다고 가정합니다. 또한 이 클래스에 직원 수를 계산하는 메서드와 직원 수를 저장하기 위한 필드가 포함되어 있다고 가정합니다. 이 메서드와 필드는 모두 어떤 인스턴스 직원에도 속해 있지 않으며 대신 회사 클래스에 속해 있습니다. 따라서 이 메서드 및 필드는 해당 클래스의 정적 멤버로 선언되어야 합니다.
이 예제에서는 새 직원의 이름 및 ID를 읽고 직원 카운터를 1씩 증가시키고 새로운 직원 수와 새 직원에 대한 정보를 표시합니다. 간단하게 설명하기 위해 이 프로그램은 키보드를 통해 직원의 현재 수를 읽어 들입니다. 실제 응용 프로그램에서는 이 정보를 파일에서 읽어 들입니다.
public class Employee4 { public string id; public string name; public Employee4() { } public Employee4(string name, string id) { this.name = name; this.id = id; } public static int employeeCounter; public static int AddEmployee() { return ++employeeCounter; } } class MainClass : Employee4 { static void Main() { Console.Write("Enter the employee's name: "); string name = Console.ReadLine(); Console.Write("Enter the employee's ID: "); string id = Console.ReadLine(); // Create and configure the employee object: Employee4 e = new Employee4(name, id); Console.Write("Enter the current number of employees: "); string n = Console.ReadLine(); Employee4.employeeCounter = Int32.Parse(n); Employee4.AddEmployee(); // Display the new information: Console.WriteLine("Name: {0}", e.name); Console.WriteLine("ID: {0}", e.id); Console.WriteLine("New Number of Employees: {0}", Employee4.employeeCounter); } } /* Input: Matthias Berndt AF643G 15 * Sample Output: Enter the employee's name: Matthias Berndt Enter the employee's ID: AF643G Enter the current number of employees: 15 Name: Matthias Berndt ID: AF643G New Number of Employees: 16 */
이 예제에서는 아직 선언되지 않은 다른 정적 필드를 사용하여 정적 필드를 초기화할 수 있지만 그 결과는 정적 필드에 명시적으로 값을 할당하기 전까지 정의되지 않은 상태임을 보여 줍니다.
class Test { static int x = y; static int y = 5; static void Main() { Console.WriteLine(Test.x); Console.WriteLine(Test.y); Test.x = 99; Console.WriteLine(Test.x); } } /* Output: 0 5 99 */
'개발 > .NET' 카테고리의 다른 글
Temporary ASP.NET Files'에 대한 쓰기 권한이 없습니다. (0) | 2017.05.24 |
---|---|
asp.net C# 캐시 사용 안함 (0) | 2017.03.22 |
.NET Framework 4.5 and 4.6 내용 (0) | 2015.11.27 |
.NET Framework 4.0 내용 (0) | 2015.11.27 |
객채 지향 프로그래밍 OOP (0) | 2015.11.26 |