반응형

Main() 메소드 : 응용 프로그램의 진입점.

※ Main()진입점이 여러개면 /main 플래그를 사용하거나 속성->시작 개체를 설정해야 한다.

static : 클래스의 범위에 있으므로 바로 호출할 수 있는 메소드

Console.WriteLine() : 텍스트 문자열을 표준 콘솔에 찍는다.


Main()의 3가지 signature

public static void Main(string[] args);

public static void Main();

public static int Main(string[] args);


System.Array의 Length 속성을 이용하면 배열의 개수를 셀수 있다.

foreach(string s in args)

와 같은 for문도 사용할 수 있다.


※ C#은 garbage collection이 가능하기 때문에 delete 키워드를 지원하지 않는다.


클래스 멤버 변수에는 자동으로 기본 값이 할당된다.

지역 변수에는 '출력' 매개변수로 기능하는 지역변수를 제외하고 초기 값을 할당해야 한다.


Console.Write() : Carriage Return 없는 텍스트 문자열을 표준 콘솔에 출력

Console.ReadLine() : Carriage Return 전까지 쌓인 입력 스트림으로 부터 정보를 얻음.

Console.Read() : 하나의 문자를 읽어옴.


포멧 지정자(placeholder) : {0}, {1}, {2}

WriteLine()은 객체 배열을 포맷 지정자로 지정할 수 있도록 오버로드 되어 있어 개수 제한 없이 항목 추가가 된다.


문자열 포멧 지정 플래그

{0:C} 같은 형식으로 사용

C : 통화(Currency) 포멧. local culture 기호를 앞에 붙인다. (\같은)

D : 10진수(Decimal) 포멧

E : 지수(Exponent) 표현

F : 고정 소수점(Float) 포멧

G : 일반(General), 고정 소수점 혹은 지수 포멧에 사용한다.

N : 기본 숫자 포멧

X : 16진수 포멧 지정.


값 형식과 참조 형식

값 형식 : 간단한 데이터 형식, 구조체

참조 형식 : 클래스

참조 형식에 대해 깊은 복사를 하기 위해서는 IClonable 인터페이스 구현 필요.

 질문 값 형식   참조 형식
 할당되는 곳 스택   관리힙
변수는 어떻게 나타내는가   local 복사본 할당 인스턴스에 의해 점유된 메모리 
 기본 형식  System.Value에서 파생 sealed 형식이 아니면 모든 형식으로부터 파생 가능. 
 다른 형식의 기본 형식이 될 수 있는가? 없다. 값 형식은 항상 sealed되어 있어 확장 불가  sealed되지 않았으면 다른 형식의 기본형식 가능 
 매개변수 전달 방식? 값으로 전달  참조로 전달 
 Object.Finalize()재정의 불가능  간접적으로 가능. 
 생성자 정의 가능. 기본생성자는 예약됨.  가능 
 소멸시기 scope를 벗어날 때  garbage collect될 때 


System.Object

Equals() : 메모리 상에 동일한 항목을 가리키면 true. 

(재정의)일반적으로 비교되는 객체들의 내부 상태 값이 동일한 경우 true를 리턴.

GetHashCode() : 특정 개체 인스턴스를 식별할 수 있는 정수 반환

GetType() : 현재 참조형식을 자세하게 설명하는 객체 바환

ToString() : "namespace.classname' 형태의 문자열 반환

Finalize() : 객체가 힙으로부터 제거될 때 런타임에 의해 호출되는 메소드

MemberwiseClone : 멤버대 멤버로 복사된 새로운 객체 반환(얕은 복사)


System.Object 정적 멤버

object.Equals(), object.ReferenceEquals()


모든 C# 데이터 형식은 System namespace에 정의되어 있다. (밑은 별칭)

sbyte, byte, short, ushort, int, uint, long(64bit), ulong, char, float, double, bool(true,false), decimal(10^0~10^28), string(유니코드 문자집합), object


※ StringBuilder : 자바의 StringBuffer와 비슷한듯.


boxing과 unboxing

boxing : 명시적으로 값 형식을 이에 상응하는 참조 형식으로 변환하는 과정 <=> unboxing

※ unboxing시 데이터 형식이 box된 형식과 일치하는 지 검사하고 일치하면 복사가 진행됨. (InvalidCastException 발생 가능)

※ C# 클래스는 필요할 때 boxing, unboxing을 수행한다.


const : 자바의 static final 과 비슷한 의미. 값이 컴파일 시간에 계산된다. 고정되고 변경할 수 없는 값.


foreach (변수타입 변수명 in 배열)

배열 반복 처리 뿐만 아니라 시스템 컬렉션이나 사용자 지정 컬렉션도 반복 처리 가능.


C# 흐름 제어 구조

자바처럼 Boolean 표현식에만 반응한다.


메소드 접근 한정자

public

private

protected

internal : 해당 어셈블리 내에 있는 모든 형식에서 접근 가능하게 정의

protected internal : 메소드 접근이 현제 어셈블리나 파생된 형식으로 제한한다.


메소드 매개변수 한정자

COM의 attribute와 비슷

(없음) : in attribute와 비슷

out : 출력 매개변수는 호출된 맴버에 의해 할당된다.

ref : [in,out] attribute와 유사. 값은 호출자에 의해 할당. 메소드는 호출 범위 안에서 재할당 가능.

params : 여러 개의 매개변수를 한 매개변수처럼 보낼 수 있다.


out 매개변수 예시

※ 초기화 될 필요가 없다.

public static void add(int x,int y, out in ans)

{

    ans = x+y;

}


int ans;

Add(90,90, out ans);

Console.WriteLine("90 + 90 = {0}", ans);


ref 매개변수

※ 반드시 초기화 되어야 한다.


참조형식을 값, 참조 형식으로 전달하기

참조형식 -> 값으로 전달 : 객체 상태 데이터는 변경 가능. 다른 객체를 참조하도록 변경되지 않음.

참조형식 -> 참조로 전달 : 상태데이터, 다른 객체를 참조하도록 변경됨.


배열

크기가 고정된 배열을 생성할 때 new 필요.

배열에 데이터를 넣으려면 index연산자 이용. (bookOnPl[0] = "haha"; )

중괄호 사용 가능.

 - int[] ages = {20,22,23,0}

 - string firstnames = new string[5]{"Steve", "Gina", "Swallow",'Baldy","Gunner"};


System.Array 기본클래스

162P 참조


문자열 조작하기 

164p참조

+ = Concat() 동일하다.

C#에서도 escape 문자 (\t, \\, \n, ...) 사용 가능.

@를 통해 적힌 문자열 그대로 출력 가능.


StringBuilder

MFC의 CString이나 COM의 CComBSTR과 유사.

Append메소드.


열거형

0부터 시작, 혹은 프로그래머 마음대로 다른 번호 부여 가능.

암시적으로 System.Enum에서 파생.


네임스페이스 별칭 사용하기

using The3DHexagon = My3DShapes.Hexagon;

using 별칭 = 원래네임스페이스.클래스;

반응형

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

Nullable Type  (0) 2009.09.07
Generic  (0) 2009.09.07
Partial Class  (0) 2009.08.29
C# 2장 간단 정리  (0) 2009.07.30
C# 1장 간단 정리  (0) 2009.07.30

+ Recent posts