728x90
C# 에서는 함수를 4가지 방법으로 사용이 가능하다.
C++에서 Call by value와 Call by reference에 대한 개념이 있다면 문법을 익히면 금방 사용할 수 있을 것으로 생각된다.
설명과 아래 코드를 참조하면 좋다.
CallFunc001 ~ 004까지 4가지 방법으로 함수를 사용해보았다.
*static 이 앞에 붙는 이유는 main함수에도 static이 붙어있기 때문이다.
*static이 붙어있는 함수와 붙어있지 않는 함수는 읽는 순서가 다르기 때문에 고려하여 써야한다.
1번 방법 : Call by value를 이용한 방식으로 보통 C++에서 사용했던 함수 사용방식과 같다.
//Main에서 호출
CallFunc001(str);
//함수 생성
static void CallFunc001(string[] str)
2번 방법: Call by value + params을 붙여 호출시에 여러개의 문자열을 입력해줄 수 있다.
//main에서 호출
CallFunc002("Hello", "World", "+", "Hello", "World");
//함수 생성
static void CallFunc002(params string[] str){}
3번 방법: Call by reference에 의한 방법이다. cpp에서는 &을 이용했지만 C#에서는 ref를 이용한다.(reference의 줄임말)
//Main에서 호출
CallFunc003(ref str);
//함수 생성
static void CallFunc003(ref string[] str){}
4번 방법 : Call by value에 의한 방법이다. return값을 out을 통해 받을 수 있다.
- 꼭 받아야 하는 값이 있을때 사용한다. out 값이 채워져 있지 않으면 에러를 발생시킨다.
//Main에서 호출
CallFunc004(str, out resultStr);
//함수 생성
static void CallFunc004(string[] str, out string[] outStr){}
/// ///////함수의 4가지 선언방법
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace csharp_practice
{
public class Program
{
static void Main(string[] args) // static함수와 static함수가 아닌 함수를 부르는 순서가 달라서 static함수 내에서는 static함수만 써야한다.
{
string[] str = new string[2] { "Hello", "World" };
CallFunc001(str);
CallFunc002("Hello", "World", "+", "Hello", "World");
CallFunc003(ref str); // c++에서는 &였지만 c#에서는 ref키워드
string[] resultStr; //string 배열을 선언
CallFunc004(str, out resultStr); //out을 활용해서 값을 넘겨받음
foreach(string result_ in resultStr)
{
Console.Write("{0} ", result_);
}
Console.WriteLine();
int number = 0;
number += 1; // 이렇게 넣어야 출력이 1이 나온다 .
number = number++; //이렇게 넣으면 바로 아래 출력이 0이 나온다.(c++에서는 1이 나온다)
//왜냐하면 c++에서는 new하면 delete를 해줘야하지만 c#에서는 메모리세이프티적인 언어라서 자동으로 닫혀버리기 때문
//여기서 c#에서는 덧셈을 할때도 따로 메모리를 할당을 해주고 계산을 해줌을 알 수 있다.
Console.WriteLine("number는 무슨 값이 들어 있?? {0}", number);
}//Main()
//C#에서 함수를 Call하는 방법 4가지
//4번 방법 : 매개변수를 call by reference 방식으로 넘기는 방법이나 독특한 방법
// 매개변수를 통해서 값을 return한다 .
static void CallFunc004(string[] str, out string[] outStr) // out키워드를 쓸거면 무조건 out키워드에 값이 있어야 한다.
// 이것만큼은 절대로 비우고싶지 않을때 사용한다.
// C#에서는 배열로 받아도 값으로 받을 수 있다 . c++에서는 배열 첫 주소를 받아오지만
{
string[] resultString = new string[str.Length + 1];
for(int i=0; i<str.Length; i++)
{
resultString[i] = str[i];
}
resultString[str.Length] = "!";
outStr = resultString; //값을 넣어주는 순간 에러가 사라지는것을 볼 수 있다 .
}
//3번 방법 : 매개변수를 call by reference 방식으로 넘기는 방법
static void CallFunc003(ref string[] str) //ref (reference _참조 )의 약자
{
foreach (string strElement in str)
{
Console.Write("{0} ", strElement);
}
Console.WriteLine();
}
//2번 방법 : 매개변수를 call by value 방식으로 넘기는건 똑같음 . 그런데 원하는 만큼 넣을수있다.
// 배열의 요소형태로 여러개 넘길 수 있.
static void CallFunc002(params string[] str) //params (매개변수: 파라미터의 줄임말) , 같은말 : arguement(인수)
{
foreach (string strElement in str)
{
Console.Write("{0} ", strElement);
}
Console.WriteLine();
}
// 1번 방법 : 매개변수를 Call by value 방식으로 넘기는 방법
static void CallFunc001(string[] str) // 배열을 복사해서 받았다.
{
foreach (string strElement in str) //반복문인데 몇번 반복할지는 in 뒤에 컬렉션이 결정한다.
//컬렉션 숫자에 맞춰서 하나씩 뽑아서 strElement에 값 타입으로 복사한다.
//역순으로 돌릴수는 없다. 쓰고싶다면 리버스정렬을 사용해야한다.
//문자열도 가능하며 char형도 가능하다.
{
Console.Write("{0} ", strElement);
}
Console.WriteLine();
}//CallFunc001()
}// class Program
}
728x90
'프로그래밍 > C#' 카테고리의 다른 글
C#에서 배열(Array), 이차원배열, 다차원배열, 가변배열 선언 (0) | 2023.06.15 |
---|---|
Static 키워드가 동작하는 시점(compile Time,Run Time) (0) | 2023.06.15 |
[C#] 클래스(Class) 두번째 시간 (0) | 2023.06.13 |
[C#] 클래스(Class) 첫번째 시간 (0) | 2023.06.13 |
Function, Library, API, Frame work, 컬렉션(C#), 컨테이너(C++) (0) | 2023.06.13 |