키워드 ref -------------------------------------------------------------------------------------------------------------------------------------
C++에서는 함수인자로 들어간 파라미터들의 원본의 값까지 변경하고 싶을때 포인터나 레퍼런스를 사용한다.
하지만 C#에서는 ref라는 키워드를 통해서 함수의 인자를 참조하겠다는 것을 명시해줘야 한다.
class RefExample
{
static void Method(ref int i)
{
i = 10;
}
static void Main()
{
int val = 0; -> ref는 항상 먼저 초기화 해줘야 한다.
Method(ref val); -> 할때도 붙여줘야 한다. 이제 int val은 값이 변경되어서 다음 구문으로 이동한다.
// val is now 10 -> val의 값은 이제 44가 되어있다. 일반적으로 val의 값은 변경되지 않는다.
하지만 참조가 출동한다면? 인자로 집어넣은 값을 변경시킬 수 있다.
}
}
사용법은 함수 인자 앞에 ref만 붙여주면 끝! 참 쉽다!
키워드 params---------------------------------------------------------------------------------------------------------------------------------
키워드 out---------------------------------------------------------------------------------------------------------------------------------
확장메서드 ------------------------------------------------------------------------------------------------------------------------------------
namespace Extension
{
public static class ExtensionMethod
{
public static int Multiplication(this int var, int a, int b)
{
int result = var;
for (int i = 0; i < b; i++)
result *= a;
return result;
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("{0}", 6.Multiplication(2, 3)); -> 객체화 하지 않고도 함수를 불러올 수 있다.
}
}
}
c++의 static함수를 기억하는가 그것을 기억한다면 알기 쉬울 것이다.
즉 객체를 생성하지 않고도 다음과 같은 출력이 가능하게 하는 것이다. 각 숫자가 어떻게 대입되는지 알겠는가?
using Extension; -> 확장메서드를 사용하기 위해서는 다음과 같이 네임스페이스 지정이 필요하다.
namespace Extension
{
public static class ExtensionMethod -> 확장메서드를 포함하는 클래스도 static 클래스 이여야 한다.
{
public static int Multiplication(this int var, int a, int b) -> this를 붙여주어야 한다. this는 확장매서드 호출에 사용되는 상수나 변수의 값을 받아들인다.
{
int result = var;
for (int i = 0; i < b; i++)
result *= a;
return result;
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("{0}", 6.Multiplication(2, 3)); -> 호출하는 부분을 보자. 6? 뭐지? 라고 생각하겠지만 this에 어떤 인자가 들어갈지 생각해보면 편하다.
}
}
}
그리고 실험
namespace Extension
{
public static class ExtensionMethod
{
public static int Multiplication(this int var, int a, int b)
{
int result = var;
for (int i = 0; i < b; i++)
result *= a;
return result;
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a = 6;
int b = 7;
b = a.Multiplication(2, 3); -> 역시 변수를 통해서도 호출이 가능했다.
Console.WriteLine("{0}", b);
}
}
}
'게임개발공부 > C#공부' 카테고리의 다른 글
속성(property) (0) | 2013.12.27 |
---|---|
override 문법의 직관화 (0) | 2013.12.20 |
클래스의 새로운 개념 <partial > (0) | 2013.12.19 |
foreach (0) | 2013.12.19 |
배열과 배열메소드 (0) | 2013.12.19 |