IT/언어

[C#] C# 기본 문법

개발자 두더지 2021. 2. 16. 23:35
728x90

구조


1. 네임 스페이스의 사용

using 디렉팅을 사용하는 것으로, 네임 스페이스의 멤버를 생략하여 사용할 수 있게 된다.

(C#의 네임 스페이스에 대해서는 이 블로그를 참조)

using System;

2. 네임 스페이스의 지정

namespace 네임스페이스
{
}

3. 클래스

[public|private|protected|internal] class 클래스명
{
}

4. 메소드

[public|private|protected|internal] [static] 리턴데이터형 메소드명([인수])
{
  return;
}

5. Main 함수

.exe프로그램의 엔트리 포인트(; 컴퓨터 프로그램을 실행할 때에, 가장 처음에 실행되는 곳).

① Main은 static이여야한다.

② 리턴값은 void 혹은 int이다.

③ 인수는 커맨드라인 인수를 표시하고 있다.

static void Main(string[] args)
{
  System.Console.WriteLine(args.Length);
}

 

데이터형과 변수, 정수


1. 데이터형

설명 데이터형
부호가 있는 정수 sbyte, short, int, long
부호가 없는 정수 byte, ushort, unit, ulong
Unicode 문자 char
IEEE 부동소수점 float, double
고정밀의 10진수 decimal
Bool값 bool
열거형 enum E{...}형식의 유저 정의형
구조형 struct S{...}형식의 유저 정의형
null 허용치 null값을 가진 그 외의 모든 값의 데이터형의 확장자
그외 다른 모든 데이터형의 최종적인 기저 클래스 object
Unicode 문자열 string
class C{...} 형식의 유저 정의형
인터페이스형 interface | {...}형식의 유저 정의형 
배열형 1차원 혹은 다차원, 예를 들어 int[] 및 int[,]
델리케이트형 delegate int D(...) 형식의 유저 정의형

2. 박스화와 박스화의 해제

일반 데이터형에 대해 아래의 코드를 적용하면, 오브젝트로 다룰 수 있다.

//박스화
int i = 1;
object o = i;

//박스화의 해제
int j = (int)o;

3. 로컬 정수

const 데이터형 정수명 = 값;

 

배열


int[] a1 = new int[10];
int[,] a2 = new int[10, 5];
int[,,] a3 = new int[10, 5, 2];

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

 


설명 연산자
동일한 ==
동일하지 않은 !=
조건AND &&
조건OR ||

 

문법


1. if

if ()
{
}
else if ()
{
}
else
{
}

2. switch

int n = 1;
switch (n)
{
  case 값:
    break;
  default:
    break;
}

3. while

while ()
{
}

break, continue

do
{
} while();

## for
```csharp
for (초기화; 조건식; 변화식)
{
}

4. foreach

foreach (오브젝트 in 변수)
{

}

5. goto

loop:
System.Console.WriteLine(1);

if (true)
  goto loop;

6. 예외

try
{
}
catch ()
{
}
finally
{
}

 

클래스와 오브젝트


1. 인스턴스화

Test t = new Test();

2. 접근 한정자

한정자 설명
public  액세스 제한 없음
protected 이 클래스 혹은 파생된 클래스에 제한
internal 이 프로그램에 한정
private 이 클래스에 한정

3. 계승

public class Parent
{
}

public class child : Parent
{
}

오버라이트된 기저클래스의 멤버를 호출할 때는 "base" 키워드를 사용한다.

4. 읽기 전용 필드

"readonly"를 붙인다.

5. this

인스턴스화된 오브젝트 자신.

6. 추상 메소드

public abstruct class Chusho
{
  public abstruct int Test();
}

public class Jisso : Chusho
{
  public override int Test() {
  }
}

7. 메소드의 오버로드

같은 메소드명임에도, 인수가 다르면 몇 개라도 정의가능하다.

8. 생성자

클래스명과 동일한 이름의 메소드명으로 선언.

public class Hoge
{
  public void Hoge(int i)
  {
  }
}

9. 프로퍼티

Java의 Setter, Getter과 동일하다.

1) 정의예

접근한정자 데이터형 속성명
{
  set
  {
    return field;
  }
  get
  {
    field = value;
  }
}

2) 사용예

Test test = new Test();

test.propName = "hoge";
string hoge = test.propName;

10. 인터페이스

interface Hoge
{
    void test1();
}
interface Fuga
{
    void test2();
}
public class Bar : Hoge, Fuga
{
  public void test1()
  {
  }
  public void test2()
  {
  }
} 

11. 델리케이트

메소드의 리턴값이나 인수의 정의만을 미리 해두고, 나중에 셋팅하는 방법.

delegate 리턴값 DelegateName([인수]);
DelegateName 변수 = 실체가되는함수([인수]);

12. 제네릭

메소드나 속성으로 사용하는 데이터형을 파라미터로써 정의하고, 사용할 때에 결정하는 기능.

오버로드의 확장 등을 간단히 하거나, 동적인 사이즈의 List나 Dictionary도 제네릭을 사용하여, 사용할 수 있다.

1) 제네릭클래스 정의

class ClassName<T>
{
}

2) 제네렉클래스 메소드의 정의

접근한정자 데이터형 메소드명<T> ([인수])
{
}

예시

class Test<T>
{
  private T val;

  public void Save(T val)
  {
    this.val = val;
  }

  public T Load() {
    return this.val;
  }
}

・・・

Test<int> testObj = new Test<int>();
test.Save(1);

참고자료

qiita.com/tsuuuuu_san/items/fe9b9cdc39687af88db5

728x90