VioletaBabel

c# 본문

기본개념/C#
c#
Beabletoet 2017. 6. 18. 14:26

http://www.csharpstudy.com/



확장자 .cs

헤더파일 없음


namespace 네임스페이스명

{

Class 클래스명

{

static void Main(string[] args)

{

System.Console.WriteLine("Hello World"); // Line을 지우면 줄바꿈x

}

}

}



=========================

자료형은 long long 대신 long.

object는 모든 타입 포함.

int 등 일부 타입들은 null값을 가질 수 없는데

int? 라는 식의 ?를 붙인 자료형으로 null을 줄 수 있음.

int?를 


int? j = 10;

int로 바꾸려면 int k = j.Value;

하면 됨


===========================

배열 선언


string[] a = new string[10]; // 배열

string[,] b = { {"AA", "BB"}, {"CC", "DD} }; // 2차원 배열

string[,,] c; // 3차원 배열


//아래는 가변 배열

int[][] d = new int[3][]; // 첫번째 차원의 크기는 바로 확정.

d[0] = new int[2]; // 그 외 차원은 동적으로 서로 다르게 지정 가능.

d[1] = new int[3] {1, 2, 3};

d[2] = new int[4] {1, 2, 3, 4};


===========================


int a = 1, b = 10;

System.Console.Write("{0}번 학생의 점수는 {1}점.",a,b};


출력 = 1번 학생의 점수는 10점.


===========================

string을 char배열로 전달


string str = "Hello";

char[] ch = str.ToCharArray();


그 외에 str[0] 같은 방식도 똑같이 잘 됨.


또 str.ToUpper() 하면 전체를 대문자로, str.ToLower()하면 전체를 소문자로.


==========================

string은 변수 명이 바뀌지 않을 뿐

변수를 새로 초기화할때마다 기존 메모리를 없애고 다시 메모리를 잡는다.(Immutable하다고 함)

그래서 문자열 갱신을 자주하는 변수는


StringBuilder sb = new StringBuilder();

            for (int i = 1; i <= 5; i++)

{

                sb.Append(i.ToString()); // i를 sb로 보내줌

               sb.Append(System.Environment.NewLine); /// sb에 엔터를 넣어줌

}

string s = sb.ToString(); // s에 sb를 넣어줌

Console.Write(s); // s를 출력

이런 식으로 해줌.

이 코드는 1~5까지 엔터가 들어가며 출력


===========================

열거형 enum.


main함수의 바깥에 (위에다 하는듯) (클래스 안, 메인 바깥)


enum alpha

{

a, // 0

b, // 1

c = 5, // 5

d = 10 // 10

}


식으로 넣어 줌.


그럼 main에서


static void Main(string[] args)

{

alpha bet;

bet = alpha.a;

int value = (int)bet;

if(bet == alpha.a)

Console.WriteLine("this is A!");

}


이런식으로 써먹음.



========================

flag enum.





[Flags]

enum border

{

none = 0,

top = 1,

right = 2,

bottom = 4,

left = 8

}


static void Main(string[] args)

{

border b = border.top | border.bottom; // or 연산자로 플래그 다중 할당

if((b&border.top) != 0) // & 연산자도 플래그 체크

if(b.HasFlag(border.bottom)) // HasFlag()로 플래그 체크

Console.WriteLine(b.ToString());

}


이런 식으로 비트 구분을 이용해 여러가지 값을 동시에 넣어주는 enum형.


=========================

?? 연산자. <- C# 3.0이상만 가능



string s = str ?? "(널)"; // 변수 str이 null이면 (널)이라는 문자열 대입. null이 아니면 문자열 str 값을 s에 대입.


??의 왼쪽이 null이면 ?? 뒤의 값 리턴, null이 아니면 ?? 왼쪽 값 리턴.

int는 null을 못가져서 사용이 안되지만 Nullable<int>. 즉, int? 타입은 가능함.



======================

for문은 원래 쓰는 방식대로 하면 됨


foreach는 배열, 컬렉션에 주로 사용.


string[] array = new string[] {"AB", "CD", "EF"};

foreach(string s in array)

Console.WriteLine(s);


처럼 사용.


for, while보다 내부적으로 최적화 되어 있음.

다차원 배열 등일수록 foreach 사용을 권장함.


========================

yield


Enumerator(또는 Iterator)라 불리우는 기능.

순서대로 리턴해주는 거라고 보면 됨



        static IEnumerable<int> getnumb(int a)

        {

            yield return 10;

            yield return 20;

            if (a == 4)

                yield break;

            yield return 30;

        }

        static void Main(string[] args)

        {

            foreach(int num in getnumb(4))

                Console.WriteLine(num); // 10, 20 출력

            foreach (int num in getnumb(3))

                Console.WriteLine(num); // 10, 20, 30 출력

        }


=========================

enumerator

'기본개념 > C#' 카테고리의 다른 글

4일차  (0) 2018.01.21
3일차  (0) 2018.01.19
2일차  (0) 2018.01.18
1일차  (0) 2018.01.15
C# 코딩의 기술 : 똑똑하게 코딩하는 법 - 기본편  (0) 2017.06.25
Comments