C#

메소드로 코드 간추리기

Barbarian developer 2024. 10. 30.

메소드의 결과를 참조로 반환하기

using System;

namespace RefRetrun
{
    class Product
    {
        private int price = 100;

        public ref int GetPrice()
        {
            return ref price;
        }

        public void PrintPrice()
        {
            Console.WriteLine($"Price :{price}");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Product carrot = new Product();
            ref int ref_local_price = ref carrot.GetPrice();
            int normal_local_price = carrot.GetPrice();

            carrot.PrintPrice();
            Console.WriteLine($"Ref Local Price :{ref_local_price}");
            Console.WriteLine($"Nomal Local Price :{normal_local_price}");

            ref_local_price = 200;

            carrot.PrintPrice();
            Console.WriteLine($"Ref Local Price :{ref_local_price}");
            Console.WriteLine($"Nomal Local Price :{normal_local_price}");
        }
    }
}

 

<실행결과>

C#에서는 참조를 &가 아닌 ref를 사용합니다.

 

출력전용 매개변수

using System;

namespace UintOut
{
    class MainApp
    {
        static void Divide(int a, int b, out int quotient, out int remainder)
        {
            quotient = a / b;
            remainder = a % b;
        }

        static void Main(string[] args)
        {
            int a = 20;
            int b = 2;

            Divide(a, b, out int c, out int d);

            Console.WriteLine($"a:{a}, b:{b}, c:{c}, d:{d}");
        }
    }
}

 

<실행결과>

 

여러개의 값을 반환하는 매서드의 경우에는 ref가 아닌 out을 사용합니다.

 

ref와 out의 차이점은, ref는 결과값을 저장하지 않아도 아무런 경고를 하지 않지만, out은 결과값을 저장하지 않으면 컴파일러가 경고를 해주는 기능의 차이점이 있습니다.

 

메소드 오버로딩

using System;

namespace Overlodading
{
    class MinApp
    {
        static int Plus(int a, int b)
        {
            Console.WriteLine("Calling int Plus(int,int)...");
            return a + b;
        }
        static double Plus(double a, double b)
        {
            Console.WriteLine("Calling double Plus(double, double)...");
            return a + b;
        }
        static double Plus(int a, double b)
        {
            Console.WriteLine("Calling double Plus(int a, double b)...");
            return a + b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine(Plus(1, 2));
            Console.WriteLine(Plus(1.0, 2.0));
            Console.WriteLine(Plus(1, 5.3));
        }
    }
}

 

<실행결과>

 

가변 개수의 인수

using System;

namespace UsingParams
{
    class MainApp
    {
        static int Sum(params int[] args)
        {
            Console.WriteLine("Summing...");

            int sum = 0;

            for(int i = 0; i < args.Length; i++)
            {
                if (i > 0)
                    Console.Write(", ");
                Console.Write(args[i]);
                sum += args[i];
            }
            Console.WriteLine();

            return sum;
        }

        static void Main(string[] args)
        {
            int sum = Sum(3, 4, 5, 6, 7, 8, 9, 10);

            Console.WriteLine($"Sum : {sum}");
        }
    }
}

 

<실행결과>

 

로컬함수

using System;

namespace LocalFunction
{
    class MainApp
    {
        static string ToLowerString(string input)
        {
            var arr = input.ToCharArray();
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = ToLowerChar(i);
            }

            char ToLowerChar(int i)
            {
                if (arr[i] < 65 || arr[i] > 90) //A~Z의 ASCII 값 : 65~90)
                    return arr[i];
                else
                    return (char)(arr[i] + 32);
            }

            return new string(arr);
        }
        static void Main(string[] args)
        {
            Console.WriteLine(ToLowerString("Hello!"));
            Console.WriteLine(ToLowerString("Good Morning"));
            Console.WriteLine(ToLowerString("This is C#"));
        }
    }
}

 

<실행결과>

 

로컬함수는 메소드 안에서 선언되고, 선언된 메소드 함수 안에서만 사용되는 함수입니다.

 

 

'C#' 카테고리의 다른 글

인터페이스와 추상클래스  (0) 2024.10.31
클래스  (0) 2024.10.30
코드의 흐름 제어하기  (1) 2024.10.30
데이터를 가공하는 연산자  (2) 2024.10.29
#데이터 보관하기  (0) 2024.10.29

댓글