C#의 뼈대 : namespace,class,struct,interface,delegate,enum
C Sharp(C#) 의 뼈대
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // A skeleton of a C# program using System; namespace YourNamespace { class YourClass { } struct YourStruct { } interface IYourInterface { } delegate int YourDelegate(); enum YourEnum { } namespace YourNestedNamespace { struct YourStruct { } } class YourMainClass { static void Main(string[] args) { //Your program starts here... } } } |
using
키워드.
세 가지 쓰임이 있다.
1. [지시문] 바로 아래에 설명할 특정 네임스페이스 안에 들어있는 클래스를 풀네임으로 쓰는 불편함을 줄여주어 클래스명만 쓸 수 있게 해줌. 바로 위 코딩은 현재 1번설명에 해당하는 쓰임
2. [지시문] 형식에 대한 별칭을 만들 수 있음
1 | using Project = PC.MyCompany.Project; |
3. [구문] IDisposable 개체를 올바르게 사용할 수 있게 해 주는 편리한 구문을 제공
= IDisposable클래스 객체정의 없이도 Dispose() 메소드를 제공
1 2 3 4 | using (Font font1 = new Font("Arial", 10.0f)) { byte charset = font1.GdiCharSet; } |
네임스페이스(namespace)
키워드.
1. 클래스를 조직화 해 준다.
: .NET Framework에서는 네임스페이스를 사용하여 많은 클래스를 조직화 한다.
2. 큰 프로그래밍 프로젝트에서 클래스 및 메서드 이름의 범위를 쉽게 제어할 수 있다.
클래스(class)
다른 형식의 변수, 메서드 및 이벤트를 그룹화하여 사용자 지정 형식을 만들 수 있는 구문
static으로 선언된 클래스가 아니라면 클래스개체나 클래스인스턴스화 변수를 생성해야 하며, 이 변수는 해당 변수에 대한 모든 참조가 범위를 벗어날 때까지 메모리에 유지된다.
구조체(struct)
클래스의 경량화 버전이라고 생각하면 쉬울듯
구조체는 값 형식 ( 클래스는 참조 형식 ) = 구조체의 새 변수를 할당하고 수정해도 원본 데이터는 변경되지 않음.
상속 불가
인스턴스화 하지 않아도 구조체 사용 가능
파라미터가 없는 기본생성자나 소멸자 선언을 할 수 없다. 그치만 파라미터있는 생성자는 선언 가능함
단, 이러한 생성자가 있는 구조체의 파라미터를 다른 클래스에서 사용하고 싶다면, 인스턴스화 해서 사용해야 한다.
인터페이스(interface)
클래스 또는 구조체에서 구현할 수 있는 관련 기능 그룹에 대한 정의가 포함되어 있다.
한 클래스의 상속은 단 한개의 클래스만 가능한 것에 비해 인터페이스는 여러 개 구현이 가능한 점을 잘 활용하면 될듯.
추상 클래스(상속)와 비슷하지만, 인터페이스(구현)는 서명만 정의한다. 즉 속성(변수)이 있으면 안 되고, 멤버(메소드)의 정의만 있어야 한다.
인터페이스를 구현하는 모든 클래스 또는 구조체는 모든 멤버를 구현해야 한다.
직접 인스턴스화 불가하며, 인터페이스를 구현하는 클래스가 대신 인스턴스화 해줘야한다.
대리자(delegate)
메소드를 안전하게(보안유지, 객체지향적) 캡슐화 할 수 있게 하는 역할을 함.
이것보고 자바스크립트처럼 메소드 안에 메소드를 파라미터로 써먹을 수 있겠다는 생각을 했다.
1 2 3 4 5 6 7 8 9 10 11 12 | public delegate void Del(string message); // Create a method for a delegate. public static void DelegateMethod(string message) { System.Console.WriteLine(message); } static void Main(string[] args) { // Instantiate the delegate. Del handler = DelegateMethod; // Call the delegate. handler("Hello World"); } | cs |
열거형형식(enum)
변수에 할당할 수 있는 명명된 정수 상수 집합을 정의
기본적으로 열거형 안에 들어갈 요소의 내부형식은 int로써, 0부터 1씩 증가하여 배당된다. 물론, 강제로 숫자를 배정할 수도 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Days today = Days.Monday; int dayNumber =(int)today; Console.WriteLine("{0} is day number #{1}.", today, dayNumber); // 결과 : Monday is day number #1. enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; Months thisMonth = Months.Dec; byte monthNumber = (byte)thisMonth; Console.WriteLine("{0} is month number #{1}.", thisMonth, monthNumber); // 결과 : Dec is month number #11. | cs |