C# 정적 변수와 일반 변수의 차이

4260 단어 ASP.NET
정적 변수와 일반 변수의 차이
전역 변수 (외부 변수) 의 설명을 하기 전에 static를 붙이면 정적 전역 변수를 구성한다.전역 변수 자체가 정적 저장 방식이고 정적 전역 변수도 당연히 정적 저장 방식이다.이 두 가지는 저장 방식에 있어서 결코 다르지 않다.이 두 가지 차이는 비정상적인 전역 변수의 작용역은 전체 원본 프로그램이지만 하나의 원본 프로그램이 여러 개의 원본 파일로 구성될 때 비정상적인 전역 변수는 각 원본 파일에서 모두 유효하다는 데 있다.정적 전역 변수는 그 역할 영역을 제한한다. 즉, 이 변수를 정의한 원본 파일에서만 유효하고 같은 원본 프로그램의 다른 원본 파일에서는 사용할 수 없다.정적 전역 변수의 작용역은 하나의 원본 파일에 국한되어 있기 때문에 이 원본 파일의 함수만 공용할 수 있기 때문에 다른 원본 파일에서 오류를 일으키지 않도록 할 수 있습니다.
static 전역 변수와 일반 전역 변수 static 전역 변수는 한 번만 활성화되며, 작용역은 이 변수의 원본 파일에 제한되어 유효하며, 다른 파일 단원에서 인용되지 않도록 합니다
static 국부 변수와 일반 국부 변수 static 국부 변수는 한 번만 초기화되고 다음에는 지난번 결과 값에 근거합니다
static 함수와 일반 함수
static의 초기화 순서
먼저 예를 보십시오.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class B
    {
        public static int Y = A.X + 1;

        static B() { }

        static void Main(string[] args)
        {
            Console.WriteLine("X={0},Y={1}", A.X, B.Y);
            Console.Read();
        }
    }


    public class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }

    }
}

그림도 있고 진실도 있다.
실행 결과는 X=1, Y=2
이 예는 주로 두 가지 측면을 고찰하는데 하나는 static의 용법이고 다른 하나는 static의 초기화 순서이다.static의 초기화 순서와 규칙을 이해하면 이 문제의 답안은 쉽게 이해할 수 있다.여기에 다음과 같은 세 가지 static 대상: static 구성원,static 방법,static 구조 함수와 관련된다.규칙은 다음과 같습니다.
하나의 클래스static 구조 함수는 주어진 응용 프로그램 영역에서 한 번만 실행됩니다.static 구조 함수는 응용 프로그램 영역에서 다음 이벤트가 처음 발생할 때 트리거됩니다.
1) 클래스의 인스턴스가 생성됩니다.
2) 모든 static 구성원이 인용됨
3) 클래스에 실행 포털 Main 메소드가 포함된 경우 이러한 static 구조 함수는 Main 메소드가 호출되기 전에 실행됩니다.
4) 클래스가 어떤staic 구성원을 포함하면 이static 구성원은static 구조 함수 이전에 초기화됩니다.
5) 클래스가 어떤static방법을 포함하면 이런static방법은static구조 함수 이후에 초기화됩니다.
6) 여러 static 구성원이 존재하는 경우 초기화는 텍스트 순서에 따라 진행되며 호출 순서에 따라 바뀌지 않습니다.
지금 위의 응용 프로그램을 보십시오.Class B에main 실행 입구가 있기 때문에 B는 먼저 초기화되었습니다. 순서는static 구성원 Y->static 구조 함수입니다.Y를 초기화할 때 A.X를 인용하고 컴파일러가 Class A를 초기화하기 시작한다(이때 Class B의 초기화가 완성되지 않았음을 주의하라). 순서도 static 구성원 X->static 구조 함수이다.Class A에서 X는 정의할 때 초기 값을 부여받지 않았습니다. (static 변수를 정의할 때 가능한 한 초기 값을 부여합니다.) 컴파일러는 기본적으로 0 (int형) 을 부여합니다.그리고 static의 구조 함수를 실행합니다. Class B의 초기화는 아직 완성되지 않았기 때문에 B.Y의 값은 이때 컴파일러에 기본값 0을 부여받았습니다. 그래서 A의 static 구조 함수가 실행된 후에 X의 값은 1이 되고 B로 돌아가 초기화를 계속 완성하고 Y의 값을 2로 받습니다.마지막으로 Main을 실행하여 A.X 및 B.Y의 값을 출력합니다.
===========================================================================================================================================================================
1. static 전역 변수와 일반 전역 변수는 어떤 차이가 있습니까?static 국부 변수와 일반 국부 변수는 어떤 차이가 있습니까?static 함수와 일반 함수는 어떤 차이가 있습니까?답: 전역 변수(외부 변수)의 설명을 하기 전에static를 붙이면 정적 전역 변수를 구성한다.전역 변수 자체가 정적 저장 방식이고 정적 전역 변수도 당연히 정적 저장 방식이다.이 두 가지는 저장 방식에 있어서 결코 다르지 않다.이 두 가지 차이는 비정상적인 전역 변수의 작용역은 전체 원본 프로그램이지만 하나의 원본 프로그램이 여러 개의 원본 파일로 구성될 때 비정상적인 전역 변수는 각 원본 파일에서 모두 유효하다는 데 있다.정적 전역 변수는 그 역할 영역을 제한한다. 즉, 이 변수를 정의한 원본 파일에서만 유효하고 같은 원본 프로그램의 다른 원본 파일에서는 사용할 수 없다.정적 전역 변수의 작용역은 하나의 원본 파일에 국한되어 있기 때문에 이 원본 파일의 함수만 공용할 수 있기 때문에 다른 원본 파일에서 오류를 일으키지 않도록 할 수 있습니다.이상의 분석을 통해 알 수 있듯이 국부 변수를 정적 변수로 바꾸면 저장 방식이 바뀌고 생존 기간이 바뀐다.전역 변수를 정적 변수로 바꾼 후 역할 영역을 바꾸어 사용 범위를 제한했다.static 함수는 일반 함수와 작용역이 다르다.이 파일에만 있습니다.현재 원본 파일에서만 사용하는 함수는 내부 함수(static)로 설명하고 내부 함수는 현재 원본 파일에서 설명하고 정의해야 한다.현재 원본 파일 이외에 사용할 수 있는 함수에 대해 하나의 헤더 파일에서 설명해야 한다. 이 함수를 사용하는 원본 파일은 이 헤더 파일을 포함해야 한다. static 전역 변수는 일반적인 전역 변수와 어떤 차이가 있는가. static 전역 변수는 한 번만 활성화하고 다른 파일 단원에서 인용되지 않도록 한다.static 국부 변수와 일반 국부 변수는 어떤 차이가 있습니까? static 국부 변수는 한 번만 초기화되고 다음에는 지난번 결과 값에 근거합니다.static 함수와 일반 함수는 어떤 차이가 있습니까: static 함수는 메모리에 한 개만 있고 일반 함수는 호출될 때마다 복사본을 유지합니다
2.static은 어떤 용도가 있습니까?(적어도 두 가지를 설명해 주십시오) 1) 함수체에서 정적 변수로 성명된 변수는 이 함수가 호출되는 과정에서 그 값이 변하지 않습니다.2) 모듈 내(단 함수 외)에서 정적 변수로 성명된 변수는 모듈 내에서 사용하는 함수에 접근할 수 있으나 모듈 밖의 다른 함수에 접근할 수 없다.로컬 글로벌 변수입니다.3) 모듈 내에서 정적 함수로 명시된 함수는 이 모듈 내의 다른 함수에만 호출될 수 있다.그것은 이 함수가 성명된 모듈의 로컬 범위 내에서 사용될 수 있도록 제한되어 있다는 것이다
==========================================================================================================================================================================
참조 문구:
http://www.cnblogs.com/Ihaveadream/archive/2008/06/27/1231053.html
 http://www.cnblogs.com/lmjob/archive/2009/07/29/1533820.html

좋은 웹페이지 즐겨찾기