Microsoft MVP성태의 닷넷 이야기
C# 7.1 185~187p 질문입니다. [링크 복사], [링크+제목 복사],
조회: 16789
글쓴 사람
꾸엉
홈페이지
첨부 파일
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class Mathematics
{
    delegate int CalcDelegate(int x, int y);

    static int Add(int x, int y) { return x + y; }
    static int Subtract(int x, int y) { return x - y; }
    static int Multiply(int x, int y) { return x * y; }
    static int Divide(int x, int y) { return x / y; }

    CalcDelegate[] methods;

    public Mathematics()
    {
        methods = new CalcDelegate[] { Mathematics.Add,
            Mathematics.Subtract, Mathematics.Multiply, Mathematics.Divide };
    }

    public void Calculate(char opCode, int operand1, int operand2)
    {
        switch (opCode)
        {
            case '+':
                Console.WriteLine("+ : " + methods[0](operand1, operand2));
                break;

            case '-':
                Console.WriteLine("- : " + methods[1](operand1, operand2));
                break;

            case '*':
                Console.WriteLine("* : " + methods[2](operand1, operand2));
                break;

            case '/':
                Console.WriteLine("/ : " + methods[3](operand1, operand2));
                break;
        }
    }
}

namespace Study1
{

    class Program
    {
        delegate void WorkDelegate(char arg1, int arg2, int arg3);

        static void Main(string[] args)
        {
            Mathematics math = new Mathematics();
            WorkDelegate work = math.Calculate;

            work('+', 10, 5);
            work('-', 10, 5);
            work('*', 10, 5);
            work('/', 10, 5);
        }
    }
}



델리게이트를 공부하고 있는데요

왜 이번 예제에서는 Mathematics 클래스의 접근 제한자를 public으로 해서
namespace 밖에서 선언(?)을 한건가요?



그리고 static int Add(int x, int y) { return x + y; }
이 부분에서 static을 지우고 실행하면


        methods = new CalcDelegate[] { Mathematics.Add,
            Mathematics.Subtract, Mathematics.Multiply, Mathematics.Divide };

이 구문에서 Mathematics.Add 부분이 오류가 발생하던데

이 코드에서 static이 어떤 역할을 해주기에 static을 지우면 오류가 발생하는건가요?
ㅜㅜ static에 대한 개념을 잘 모르겠습니다..








[최초 등록일: ]
[최종 수정일: 10/29/2018]


비밀번호

댓글 작성자
 



2018-10-29 10시22분
namespace는 임의 관리 단위일 뿐 프로그램의 논리와는 상관이 없는 부분입니다. 그리고 static을 빼면 instance 멤버가 되기 때문에 그 앞에 클래스 이름을 붙일 수 없습니다. 따라서 "Mathematics.Add"라고 하면 안 되고 그냥 "Add"라고 해야 합니다.


정성태
2018-10-29 01시00분
[꾸엉] 감사합니다~!
[guest]

... 91  92  93  94  [95]  96  97 
NoWriterDateCnt.TitleFile(s)
78임은선1/26/200513653        답변글 [답변]: [답변]: 질문이 있는데요....
72최정희1/19/200513096또 접니다.
73정성태1/19/200512898    답변글 [답변]: 또 접니다. [2]
74최정희1/19/200512246        답변글 [답변]: [답변]: 당연히 도움이 되지요.
75정성태1/19/200512791            답변글 [답변]: [답변]: [답변]: 당연히 도움이 되지요.
69최정희10/13/200412238저 기억하실런지? 그때 두리로IE툴바 만들어 주셨죠.
62엄길웅10/1/200413440매번 물어보기만 하는군요..
63정성태10/2/200413182    답변글 [답변]: 매번 물어보기만 하는군요..
64keal...10/5/200414836        답변글 [답변]: [답변]: 매번 물어보기만 하는군요..
65정성태10/6/200414685            답변글 [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
68keal...10/11/200412391                답변글 [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
71정성태10/31/200412444                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 매번 물어보기만 하는군요..
58엄길웅9/30/200412586안녕하세요.. 추석은 잘 보내셨는지요?
59정성태9/30/200412747    답변글 [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
60엄길웅10/1/200412591        답변글 [답변]: [답변]: 안녕하세요.. 추석은 잘 보내셨는지요?
56엄길웅9/23/200412921ATL을 이용해서 함수를 하나 만들었습니다.
57정성태9/23/200413955    답변글 [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
61엄길웅10/1/200412611        답변글 [답변]: [답변]: ATL을 이용해서 함수를 하나 만들었습니다.
54차광석8/26/200412786잘 지내시죠?
55정성태8/27/200411891    답변글 [답변]: 잘 지내시죠?
52김명원8/3/200412718질문이요..
53정성태8/19/200412571    답변글 [답변]: 질문이요..
50김상표7/5/200412426질문요...
51정성태7/6/200412273    답변글 [답변]: 질문요...
45송야5/29/200412420웹페이지 자동로그인..
46정성태5/31/200413327    답변글 [답변]: 웹페이지 자동로그인..
... 91  92  93  94  [95]  96  97