|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication1
- {
- class Program
- {
- public void Increase(int i)
- {
- i++;
- Console.WriteLine("increase 메소드 안:{0}", var);
- return;
- }
- static void Main(string[] args)
- {
- Program pg = new Program(); // 이건 나중에~
- int i=10;
- Console.WriteLine("메소드호출전:{0}", i);
- pg.Increase(i);
- Console.WriteLine("메소드호출후:{0}", i);
- }
- }
- }
여기서 주의해서 봐야할곳은
23줄 : 메소드에 i를 집어넣고
13줄 : 여기에서 i를 +1 시키는것을 볼 수 있습니다.
14줄 : 메소드 안에서는 i가 증가하지만
24줄 : 메소드 밖에서는 i값이 그대로입니다.
따라서 Increase메소드 안과 Increase메소드밖의 Main변수값은 이름만 같지 달라요~
이전의 포스팅에서 정리했던 메소드의 범위를 생각하면 됩니다.
|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication1
- {
- class Program
- {
- public void Increase(ref int i)
- {
- i++;
- Console.WriteLine("increase 메소드 안:{0}", i);
- return;
- }
- static void Main(string[] args)
- {
- Program pg = new Program(); // 이건 나중에~
- int i=10;
- Console.WriteLine("메소드호출전:{0}", i);
- pg.Increase(ref i);
- Console.WriteLine("메소드호출후:{0}", i);
- }
- }
- }
결과)
위에서 보았던 Call by Value와의 차이점은 결과에서도 보이죠..?
메소드안에 있는값을 변경했는데 메소드밖의 값이 변경되었습니다.
ref로 인하여 지역변수를 만드는 것이 아니라 외부의 변수값을 참조하여 사용하는 것입니다.
11줄, 23줄 : ref 참조
|
메소드는 보통 return문에 의하여 하나만 돌려주므로, 값 여러개를 돌려받고 싶은 경우 출력인자방식을 사용한다.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication1
- {
- class Program
- {
- public void Increase(out int var1,out int var2)
- {
- var1 = 1100;
- var2 = 2000;
- }
- static void Main(string[] args)
- {
- Program pg = new Program(); // 이건 나중에~
- int i = 10;
- int j = 5;
- Console.WriteLine("메소드호출전:i:{0},j:{1}", i,j);
- pg.Increase(out i, out j);
- Console.WriteLine("메소드호출후:i:{0},j:{1}", i, j);
- }
- }
- }
그러하다 ㅇㅇ...
|
인자(변수)목록의 길이가 고정적이지 않고 상황에 따라 변화하는 호출을 지원한든 인자를 말한다. 인자를 일일히 바꾸지 않고 개수를 늘리거나 줄일 수 있습니다.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication1
- {
- class Program
- {
- public int average(params int[] ar)
- {
- int averageVar=0;
- for(int i=0; i < ar.Length; i++)
- {
- averageVar = averageVar + ar[i];
- }
- averageVar = averageVar / ar.Length;
- return averageVar;
- }
- static void Main(string[] args)
- {
- Program program = new Program();
- int averageVar;
- averageVar = program.average(78,65);
- Console.WriteLine("평균값은 : {0}",averageVar);
- Console.Write("\n");
- averageVar = program.average(100,64,78,58,66,30);
- Console.WriteLine("평균값은 : {0}", averageVar);
- }
- }
- }
결과)
반응형
'컴퓨터프로그래밍 > C#' 카테고리의 다른 글
C# - 클래스, 객체지향의 개념잡기 (0) | 2016.11.24 |
---|---|
C# - 메소드 오버로딩 (0) | 2016.11.24 |
C# 변수의 범위 (0) | 2016.11.22 |
C# - 메소드 (6) | 2016.11.22 |
C# - 배열 (2) | 2016.11.21 |