새로 만든 클래스 안에서 변수 설정이 안되는 이유가 뭘까요?

안녕하세요 먼저 제글을 읽어주셔서 감사드립니다

클래스에 대해서 좀 더 자세히 알고 싶어서 이것저것 하는 도중
기본적으로 만들어진 프로그램 클래스 밖에서 다른 클래스를 만들었을 경우 변수선언을 하면
쓰지 못한다고 나옵니다. 같은 네임클래스 안에서 만들어진 클래스 인데 왜 그럴까요?

프레임워크 .net Core 3.1에서 테스트 해봤습니다

감사합니다

좋아요 4

두 가지를 살펴봐야 합니다.

  1. 클래스 필드 이니셜라이저(필드 초기자)는 정적이 아닌 필드를 참조할 수 없습니다: int c = a + b;
    • a, b 필드가 변하지 않는 값이라면
    class MySum
    {
       const int a = 8;
       const int b = 10;
       int c = a + b;
    }
    
    이렇게 const로 하거나 static이어야 합니다.
  2. 필드 기본 접근 한정자에 의해 aa.c에 접근할 수 없습니다.
    public | protected | private 한정자를 명시적으로 사용하는게 좋습니다. 기본 한정자는 private이므로 외부에서 접근할 수 없습니다.

대신 아래와 같이 쓰는 것을 권장합니다.

class MySum
{
    private int _a = 8;
    private int _b = 10;
    public int C => _a + _b;
}

class Program
{
    static void Main(string[] args)
    {
        MySum aa = new MySum();
        Console.WriteLine(aa.C);
    }
}

참고로 int C => _a + _b는 읽기만 되는 속성입니다. 그러므로 C를 얻으려 할 때마다 _a + _b를 연산합니다.

좋아요 6

완벽하진 않지만 알기쉽게 설명하자면 변수는 함수 내에서 사용할 수 있어요.
그리고 @산업역군 님께서 만드신 것은 필드라고 부릅니다.

함수를 만드신 다음 그 안에 저 a, b, c를 넣어보시면 원하는 결과가 나올거에요.

좋아요 4

기초적인 질문이라 흥미가 없을 수도 있는데 자세한 답변 감사드립니다. 써주신 답변이 완벽하게 이해되는건 아니지만 답변 바탕으로 열심히 공부해보겠습니다! 다시 한번 소중한 시간 내주셔서 감사드립니다!!

좋아요 1

맞습니다 필드! 답변 감사드립니다!!

좋아요 1

조언 주신 내용으로 코드를 수정해봤습니다! 제가 원하는 값이 나왔습니다

using System;
using System.Collections.Generic;

namespace TEST3
{
    class MySum
    {
        public int simpleSum()
        {

        int a = 8;
        int b = 10;
        int c = a + b;
        return c;
        }
    }

    class Program
    {
        static void Main()
        {
            MySum aa = new MySum();
            Console.WriteLine(aa.simpleSum());
        }
    }

}

감사합니다!

좋아요 3