열거형은 사용자 정의 타입이다. 기본형 중에서도 숫자와 관련된 타입(int, long, double, short 등등)을 상속받아 정의할 수 있다. 기본형식은[접근제한자] enum enum명{ 식별자1, 식별자2, 식별자3 .......}처럼 사용 enum Today : byte { Monday, Tuesday, Wednesday } enum Olympians { Zeus, Hera, Poseidon = 10, Athena, Ares = 20, Aphrodite } 다음은 enum을 정의한 것으로Today와 Olympians이다. Today처럼 상속을 받으면 해당 기본형타입을 토대로 사용하며, 상속받는 타입이 없을 경우(Olympians경우)에는 기본적으로 int(System.Int32)를 상속받는다. ..
- delegate는 함수(메서드)를 담을 수 있는 타입이다.- 타입이기 때문에 메서드의 매개변수나 리턴타입 같은 곳에도 delegate타입을 선언 할 수 있다.- 델리게이트에 메서드를 여러개 담을 수 있다. 다음은 델리게이트의 사용 예이다. 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 delegate void OperDelegate(int n1, int n2); class Oper { public void Add(int n1, int n2) { Console.WriteLine(n1 + n2); } public void Sub(int n1, int n2) { Console.WriteLine(n1 - n2); } publi..
연산자 오버로딩이란?- 피연산자가 하나 또는 둘 모두가 사용자 정의 클래스거나 구조체 형식일 때 해당 클래스나 구조체 안에 사용자 정의 연산자를 구현할 수 있는 것 예를 들어 코드를 보겠다.class Kilogram { int kg; public int Kg { get { return kg; } } public Kilogram(int kg) { this.kg = kg; } public int Add(Kilogram k) { return this.kg + k.kg; } public static Kilogram operator +(Kilogram k1, Kilogram k2){ return new Kilogram(k1.kg + k2.kg); } } class Program { static void Main(..
Object는 모든 클래스의 최상위 조상이다.c#도 모든 객체지향언어가 그렇듯 단일 상속만을 지원하는데..만약 클래스 A와 클래스 B가 있는데클래스 A는 부모클래스클래스 B는 자식클래스라 하자. c#컴파일러는 컴파일시 아무것도 상속 받고 있지 않는 클래스에 대해 System.Object클래스를 상속한다.클래스 B의 부모는 A클래스이지만 클래스 A의 부모는 아무것도 없기 때문에 결국 컴파일시 class A : Object{ }같이 변한다. 종국에는 상속관계도에 따라Object class - A class - B class와 같이되므로 A와 B 클래스 둘 전부 Object를 최고 조상 클래스로 갖게된다. Object클래스는 참조형식이지만 값형식이 되기도 한다.값형식일 경우는 System.ValueType을 ..
is 와 as 키워드와 비슷한 기능을 하는 것을 JAVA로 말한다면 instanceof키워드를 들 수 있다. is - 참조변수와 인스턴스를 비교해 형변환이 가능하다면 true 형변환이 불가하다면 false를 반환.as - 참조변수와 인스턴스를 비교해 형변환이 가능하다면 해당 인스턴스를 반환 아니라면 null을 반환 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58namespace ObjectApplication { class TestParent { internal..
자바와 같이 c#도 객체지향언어이며, 상속개념이 있다.상속은 부모타입의 멤버들을 자손이 물려받는 것이다.상속받는다를 확장한다라고도 표현할 수 있다. 이유는 부모의 멤버들을 자손이 물려받고 자손은 물려받은 멤버와 함께 자손 자신이 가지고 있는 멤버가 따로 있을 수도 없을 수도 있기 때문에 부모에 비해 항상 자손클래스 멤버의 수는 같거나 더 많기 때문.. 다음은 상속의 예이다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace InheritApplication { class GasStation { protected int disel; ..
class Program { static void Main(string[] args) { Korean k = null; k = k ?? new Korean("cnsdl"); Console.WriteLine(k); } } class Korean { public string name { get; set; } public Korean(string name) { this.name = name; } public override string ToString() { return this.name; } } ?? 키워드 마치 삼항 연산자와 비슷한(같은건 아님) 성질을 지니고 있습니다. 단지 ?? 키워드는 그 대상을 기본타입이 아닌 객체의 변수를 대상으로 한정짓고 있습니다. 코드를 보시면 Korean이라는 객체를 초기에 ..
깊은복사, 얕은복사 (값에 의한 복사, 참조에 의한 복사)class Program { static void Main(string[] args) { Deep d1 = new Deep(); //struct 값형식 d1.a = 10; Deep d2 = d1; d2.a = 20; Console.WriteLine("d1.a의값 : {0}, d2.a의값 : {1}", d1.a, d2.a); //struct구조체는 값형식의 특성을 띄고 있습니다. //struct변수는 할당받은 값과 같은 값을 가지고 //복사가 이루어져 새로운 인스턴스를 생성한 것 같은 특징을 띄고 있습니다. //결과적으로 d2가 가지고 있는 a변수의 변경에 d1은 영향을 받지 않습니다. //이런것을 '깊은복사'라고 합니다. Shallow s1 = n..
프로그래밍에서 다뤄지는 모든데이터는 결국 byte데이터 입니다.프로그래밍 하시는 분들은 아시겠지만 1byte는 8개의 bit를 가지고 한개의 bit는 이진수로 1과 0의 값을 가집니다.일련의 데이터를 바이트배열로 변환하는 작업을 직렬화, 다시 그 바이트배열을 원래 형태의 데이터로 복원하는 작업을 역직렬화라고 합니다. System.BitConverter BitConverter클래스는 getBytes함수를 통해 바이트 배열로 변환을 해줍니다. 다시 역직렬화를 위해서는 ToBoolean등의 함수를 사용하여 하면 됩니다. byte[] ibytes = BitConverter.GetBytes(450000); byte[] bbytes = BitConverter.GetBytes(true); byte[] dbytes =..
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication141119 { class Program { static void Main(string[] args) { int n = 0; string t = null; //////////////////////////////////////////////////////// try { n = 10 / n; //예외 구문을 사용하지 않고 위 라인의 코드를 사용하면 DevideByZeroException을 경험할 것이다. } catch { } ////////////////..
닷넷 프로그램은 CLR환경이 초기화 된 후 개발자가 작성한 소스코드가 실행되는 구조다. 그런데 가끔은 이 초기화 과정에어 어떤 값을 전달하고 싶을 때가 있는데 아쉽게도 소스코딩으로만으론 이 초기화 코드를 작성할 수 없다. 그래서 닷넷은 app.config라는 설정파일을 제공한다. 비주얼 스튜디오 환경에서솔루션 탐색기의 프로젝트에 대고우클릭 - 추가 - 새항목 - 응용프로그램 구성파일을 선택하면 app.config 파일이 생성된다. 이 파일은 XML형식을 따른다. app.config에 들어가는 엘리먼트를 알아보면 1. supportedRuntime supportedRuntime은 닷넷CLR의 버전을 명시하고 있다.이것은 초기에 4.5버전을 가지고 있으며, 원한다면 프로젝트 - 속성 - 응용프로그램탭 - 대..
C#에서의 키워드 readonly와 const는 값을 변경할 수 없다는 같은 특징을 가지고 있다. const int a = 1; readonly int b = 2; 하지만 차이점이 있다면 readonly키워드가 붙은 변수의 경우 생성자에서의 변경을 허용한다.const키워드의 경우 변수 선언시 명시적(생성자X)으로 값을 저장하여야 한다. readonly는 인스턴스 선언시 초기화 되지만 const는 컴파일 할때 초기화 된다. 아래는 두 readonly와 const의 비교 소스코드이다. class ProgramEx { readonly int ri = 5; const int ci = 4; public ProgramEx() { this.ri = 3; //this.ci = 3; //ci는 생성자에서 초기화 할 수 ..
정보은닉이라고 하면 보여주기 싫은 정보를 감추는 것으로 해석할 수 있다. 객체지향 프로그래밍 언어에서의 정보은닉은 인스턴스의 멤버에 직접접근을 막는 것이다. class Program{ public int no = 0; } 객체를 정의하고 인스턴스를 생성하고 위에 제시한 no라는 변수에 접근이 가능할 것이다. 하지만 no에 10이하의 수만 저장할 수 있다고 할 때 no의 접근에 10이하의 수로 제한하는 어떤 제한하는 방법도 가지고 있지 않다. class Program{ int no = 0; public void setNo(int no){ if(no > 10){ return; } this.no = no; } public int getNo(){ return no; } } 그래서 getter와 setter라는 ..
델리게이트란 메서드를 값으로 가질 수 있는 타입으로써 델리게이트형 타입 변수를 선언함으로써 이 변수에 메서드를 값으로 넘길 수 있다. 자세한 부분은 밑에 코딩 참고 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DelegateApplication; namespace DelegateApplication1 { class Program { static void Main(string[] args) { DelegateEx de = new DelegateEx(); //Console.WriteLine(de.sDel(1,2)); //SDelegate..
Colored By Color Scripter™ 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 38 39 40 41 42 43 44 45 46 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ConsoleApplication11; namespace ConsoleApplication1 { class OperatorTest { static void Main(string[] args) { Operators o..