• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문

22.11.15 00:50 작성 조회수 226

0

namespace 예제3
{
    internal class Program
    {
        static int a = 3;   // -> static 이아니면 아래 함수 호출시 오류가 나는 이유??
        static void Main(string[] args)
        {
            int a;
            a = 1;
            char c = 'A';
            string str = "abcd";
            bool con = true;
            Console.WriteLine("a = " + a);
            Console.WriteLine("c = " + c);
            Console.WriteLine("str = " + str);
            Console.WriteLine("con = " + con);
        }
        static private void Func1()
        {
            Console.WriteLine("a = "+a);
        }
    }
}

Q static int a = 3; 에서 static이 아니면 아래 함수 호출시 오류가 나는 이유가 뭘까요?

 

 

 

답변 1

답변을 작성해보세요.

0

Program.cs의 main() 함수부터 프로그램은 시작하도록 설계되어 있습니다. 그런데 main()함수가 static이죠. 즉, 프로그램 실행 시 할당되고 종료할때까지 없어지지 않는 영역이 static 메모리 영역인데 여기서부터 프로그램을 시작시킵니다.

static은 특수한 메모리 영역으로 반드시 static끼리만 호출이 되는 제약점을 가지고 있죠. 즉, 일반적으로 사용하는 heap 메모리 영역의 공유가 안되는 제한된 영역입니다.

그래서 이런 프로그램에서는

public static main()

{

MyApp app = new MyApp();

app.Run(); // 이렇게 static이 아닌 인스턴스의 Run()함수를 호출하고 거기서부터 프로그램을 짜는 것이 일반적입니다.

}

 

public class MyApp

{

public void Run()

{

}

}