VioletaBabel
c# 본문
확장자 .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