본문 바로가기

C#

(9)
C# event C# event delegate 는 메서드를 가리킬 수 있는 타입의 간편 표기법.event도 간편표기법. event를 사용하면 정형화된 콜백 패턴을 구현하려할때 코드를 줄일 수 있음.- 조건1. 클래스에서 이벤트(콜백)를 제공한다.2. 외부에서 자유롭게 해당 이벤트(콜백)을 구독하거나 해지하는 것이 가능하다.3. 외부에서 구독/해지는 가능하지만 이벤트 발생은 오직 내부에서만 가능하다.4. 이벤트의 첫번째 인자는 이벤트를 발생시킨 타입의 인스턴스다.5. 이벤트의 두번째 인자는 해당 이벤트에 속한 의미 있는 값이 제공된다.꽤 까다롭다.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535..
C# 구조체, ref, out C# 구조체 (Struct) 클래스처럼 사용자 정의 형식을 두는 법.특징1. new로 생성해도되고 안해도 된다.2. 기본 생성자는 명시적으로 정의할 수 없다.3. 매개변수를 갖는 생성자를 정의해도 디폴트생성자가 생성된다. (클래스는 생성x)4. 매개변수를 받는 생성자의 경우 반드시 해당 코드내에서 구조체 모든 필드값을 할당해야한다.123456789101112131415161718192021222324252627struct Vector{ public int X; public int Y; public Vector(int x, int y) { // 모든 필드 초기화 필수 this.X = x; this.Y = y; } public override string ToString() { return "X: " + X..
C# 인터페이스 인터페이스 구현 없이 메서드 선언만 포함된 클래스 문법과 유사하다.추상메서드만 0개 이상 담고 있는 추상 클래스로 봐도 무방.1234567891011abstract class DrawingObject{ public abstract void Draw(); public abstract void Move(int offset);}interface IDrawingObject{ void Draw(); void Move();} Colored by Color Scripter 추상클래스를 쓰면되지 왜 인터페이스를 만들었을까?- 클래스는 다중 상속이 불가능 하기 때문.1234class Notebook : Computer, IMonitor, IKeyboard{ void IMonitor.TurnOn(){}; // 추상메서드와..
C# delegate (콜백, 체인, 범용성) C# 델리게이트(delegate) : C#에서 메서드를 가리킬 수 있는 타입(C++의 함수 포인터, 함수형프로그래밍에서 일급 함수와 유사하다.)delegate로 선언한 타입이 메서드를 가리키기 때문에그 메서드를 직접 호출하는 것 대신에 delegate로 그 메서드를 호출할 수 있다.- 메서드를 직접호출하면되지 왜 굳이 delegate를 사용해서 호출할까? 는 잠시 후에..1. delegate 만들기 delegate가 어떤 메서드를 가리키기 때문에 그 메서드와 동일한 매개변수와 리턴타입으로 선언해야한다.1234567선언 구문=> 접근제한자 delegate 대상_메서드의_반환타입 타입명(대상_메서드의_매개변수들..);(예시에선 접근제한자 생략) delegate void Type1(void); // void ..
C# 다형성 (override, overload, implicit, explicit) C# 다형성 메서드 오버라이드- 자식클래스에서 부모클래스로부터 상속받은 부모의 메서드를 재정의하여 사용하는 것1. 부모클래스에서는 오버라이드를 가능하게 하기 위해 'virtual' 이라는 예약어를 메서드 앞에 붙인다.2. 자식클래스에서는 재정의하여 사용하고 싶으면 'override' 라는 예약어를 메서드 앞에 붙인다.123456789101112131415161718192021222324252627282930313233343536373839using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApp2{ class Mammal { v..
C# 캡슐화, 상속(접근제한자, 프로퍼티, as, is, Object, this, base) 캡슐화 (Encapsulation) 객체안의 변수나 함수에 아무나 함부로 접근해서 변경하면 프로그램에 지장을 주는 경우가 많아지므로 그렇게 하지 못하게 하기 위해 내부 멤버를 숨겨야 함. 이렇게 하는 것이 캡슐화.접근제한자private : 클래스 내부에서만 접근 가능protected : 내부에서 접근 및 파생 클래스에서만 접근 가능public : 내부, 파생클래스, 외부에서도 접근 가능internal : 동일 어셈블리 내에서는 public에 준한 접근 가능, 다른 어셈블리에서는 접근 불가internal protected : 동일 어셈블리 내에서 정의된 파생클래스까지만 접근 가능* 어셈블리는 아직 모르니 패스. (보통 private, public 으로 대부분 구현)12345678910111213141516..
C# 클래스 (static, 생성자, namespace, Main) C# 클래스 현실 세계를 모델링하여 사물을 속성과 행위로 나눠 코드로 표현123456789class Book{ string title; decimal ISBN13; string Content; string Author; int pageCount;} Book gulliver = new Book(); 단순히 속성만 있는 클래스를 정의하고 생성하는 코드.객체 지향 프로그래밍에서는 저런 객체들 간의 행위를 통해 코드를 작성함.1234567891011121314class Book{ public string Title; public decimal ISBN13; public string Contents; public string Author; public int PageCount; public void Open(){..
C# 기초 (변수, 예약어, 연산자, 반복문, 조건문등) C# 문법 기초 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341. 기본 자료형 (Primitive data type)int , long, short, byte, float, double, char, bool 등기존 java와 크게 ..