C# 열거형(enum)

C# 2016. 6. 20. 21:40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum Days1
{
    Sunday,
    Monday = 5,
    Tuesday
}
[Flags]
enum Days2
{
    Sunday,
    Monday,
    Tuesday
}
static void Main(string[] args)
{
    Days1 workingDays = Days1.Monday | Days1.Tuesday;
    Console.WriteLine(workingDays.HasFlag(Days1.Tuesday));
    Console.WriteLine(workingDays);
 
    Days2 workingDays2 = Days2.Monday | Days2.Tuesday;
    Console.WriteLine(workingDays2.HasFlag(Days2.Sunday));
    Console.WriteLine(workingDays2);
}
cs

실행 결과 :

True

7

True

Monday, Tuesday



C#에서도 enum을 사용할 수 있다.

[Flags] attribute를 달아줬을 때와 달아주지 않았을 때

|(or) 연산자를 먹인 후 ToString()이 다르게 작동하는 부분을 예제에서 확인할 수 있다.

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

C# ref 키워드, out 키워드  (0) 2016.06.20
C# 구조체와 클래스 선택 기준  (0) 2016.06.10
C# 값 타입의 new 할당  (0) 2016.06.10
C# 인터페이스 - IEnumerable, IEnumerator 인터페이스  (0) 2016.06.09
C# 인터페이스(interface)  (0) 2016.06.09
Posted by RPG만들기XP
,

C# ref 키워드, out 키워드

C# 2016. 6. 20. 15:22
1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args)
{
    Program program = new Program();
    int a = new int();
    Func1(ref a);
    Console.WriteLine(a);
}
static void Func1(ref int x)
{
    x = x + 1;
}
cs

실행 결과 : 

1


value type를 call by reference로 넘길 수 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Point
{
    public int x;
    public int y;
}
static void Main(string[] args)
{
    Point pt = null;
 
    Func1(pt);
    Console.WriteLine("pt : " + pt);
 
    Func2(ref pt);
    Console.WriteLine("pt.x : " + pt.x + " pt.y : " + pt.y);
}
static void Func1(Point pt)
{
    pt = new Point();
    pt.x = 1;
    pt.y = 2;
}
static void Func2(ref Point pt)
{
    pt = new Point();
    pt.x = 3;
    pt.y = 4;
}
cs

실행 결과 : 

pt : 

pt.x : 3 pt.y : 4


얕은 복사(Func1)와 ref에 의한 전달(Func2)의 차이를 잘 보여주는 예제이다.

얕은 복사에 의한 매개변수는 단순히 주소값을 복사해서 넘기는 것이며, Main에서의 pt와 Func1에서의 pt는 같은 주소를 가리키는 서로 다른 포인터이다.

하지만 Func2의 pt는 Main에서의 pt와 같다.




out 키워드 또한 ref 키워드처럼 사용하여 참조에 의한 호출을 가능케 한다.

차이점은

  1. out으로 지정된 인자에 넘길 변수는 초기화되지 않아도 된다.
    초기화되어 있더라도 out 인자를 받는 메서드에서는 그 값을 사용할 수 없다.
  2. out으로 지정된 인자를 받는 메서드는 반드시 변수에 값을 넣어서 반환해야 한다.
C언어 함수에서 인자로 주소값을 받아서 결과를 담아 돌려주는 방식과 같다.
딱 그 용도로만 쓸 수 있도록 만들어놓은 키워드이다.


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

C# 열거형(enum)  (0) 2016.06.20
C# 구조체와 클래스 선택 기준  (0) 2016.06.10
C# 값 타입의 new 할당  (0) 2016.06.10
C# 인터페이스 - IEnumerable, IEnumerator 인터페이스  (0) 2016.06.09
C# 인터페이스(interface)  (0) 2016.06.09
Posted by RPG만들기XP
,

1. 별 상관 없을 경우 모두 클래스로 구현한다.

2. 깊은/얕은 복사의 차이가 민감한 타입일 경우 선택적으로 구조체로 구현한다.

3. 참조 타입은 GC에 부담이 되므로 GC에 부하를 주는 것을 피해야 할 경우 구조체로 구현한다.

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

C# 열거형(enum)  (0) 2016.06.20
C# ref 키워드, out 키워드  (0) 2016.06.20
C# 값 타입의 new 할당  (0) 2016.06.10
C# 인터페이스 - IEnumerable, IEnumerator 인터페이스  (0) 2016.06.09
C# 인터페이스(interface)  (0) 2016.06.09
Posted by RPG만들기XP
,