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

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

스크린샷 2022-08-04 오후 10.55.02

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

프레임워크 .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개의 좋아요