전체 글 102

[C#] 인덱서

[C#] 인덱서인덱서(Indexer)는 인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티이다.인덱서 선언class 클래스이름 { 한정자 인덱서형식 this[형식 index] { get { // index를 이용하여 내부 데이터 변환 } set { // index를 이용하여 내부 데이터 저장 } } }Item 클래스를 정의하고, Item 배열을 필드로 갖는 ItemList 클래스에 인덱서를 활용해보자Item 클래스class Item { public string Name{get;set;} public int Count{get;set;} ​ public override string ToString() { return string.Format("(Name : {0}, Count : {1})", Na..

아카이빙/C# 2018.06.20

[C#] System.Array

[C#] System.ArrayC#에서는 모든 타입이 객체이다.배열도 당연히 객체이며, 기반이되는 클래스는 System.Array 이다.ForEach()private static void Print(int value) { Console.Write("{0} ", value); } ​ private static void PrintArray(int[] arr) { Array.ForEach(arr, new Action(Print)); Console.WriteLine(); } ​ static void Main() { int[] arr = {90, 65, 72, 88, 73, 91, 63}; PrintArray(arr); }배열의 모든 요소에 동일한 작업을 수행할 수 있다.Sort(), Reverse()Array...

아카이빙/C# 2018.06.20

[C#] 프로퍼티

[C#] 프로퍼티클래스를 작성하다보면 private 필드를 선언해야할 경우가 많다.이 private 필드를 다른 클래스에서 접근하게 하려면 getter, setter 메소드를 따로 정의해 줘야 하는 데 여간 귀찮은 일이 아닐 수 없다.class MyClass { private int myInt; public int GetMyInt() { return myInt; } public void SetMyInt(int newInt) { this.myInt = newInt; } } ​ class MainApp { static void Main() { MyClass instance = new MyClass(); instance.SetMyInt(5); ​ Console.WriteLine(instance.GetMyInt..

아카이빙/C# 2018.06.20

[C#] 추상클래스와 인터페이스

[C#] 추상클래스와 인터페이스추상클래스는 인터페이스와 달리 구현을 가질 수 있다.그러나 추상클래스는 인스턴스를 생성할 수는 없다.또한 추상클래스는 추상 메소드를 가질 수 있어, 인터페이스의 역할도할 수 있다.추상 클래스 구현abstract class AbstractBase { protected void PrivateMethod() { Console.WriteLine("AbstractBase.PrivateMethod()"); } public void PublicMethod() { Console.WriteLine("AbstractBase.PublicMethod()"); } public abstract void AbstractMethod(); }상속받은 클래스에서만 접근가능한 PrivateMethod어디서든..

아카이빙/C# 2018.06.18

[C#] 여러 인터페이스의 멤버를 명시적 구현

[C#] 여러 인터페이스의 멤버를 명시적 구현명시적 인터페이스 구현을 통해 이름이 같은 각 인터페이스 멤소드를 별도로 구현할 수있다.아래 예시는 섭씨온도와 화씨온도를 구하는 예시이며, 두 인터페이스 모두 GetTemperature()라는 공통 메소드를 가진다.ICelsius, IFahrenheit 인터페이스interface ICelsius { float GetTemperature(); } ​ interface IFahrenheit { float GetTemperature(); }ICelsius, IFahrenheit을 상속받은 Temperature 클래스class Temperature : ICelsius, IFahrenheit { float temperature; ​ public Temperature(f..

아카이빙/C# 2018.06.18

[C#] 인터페이스 다중 상속

[C#] 인터페이스 다중 상속C#에서 클래스는 여러 클래스를 동시에 상속할 수 없다.대신 인터페이스는 다중 상속이 가능하다.IUpgradable, ISellable 인터페이스interface IUpgradable { void Upgrade(); } ​ interface ISellable { void Sell(); }IUpgradable, ISellable을 상속받은 Monster 클래스//Monster는 업그레이드도 할 수 있고, 팔 수도 있다. class Monster : IUpgradable, ISellable { public int Level {get; set;} public int Price {get; set;} ​ public void Upgrade() { Console.WriteLine("Up..

아카이빙/C# 2018.06.18

[C#] 인터페이스를 상속하는 인터페이스

[C#] 인터페이스를 상속하는 인터페이스인터페이스는 클래스만 상속받을 수 있는 게 아니다.기존의 인터페이스에 새로운 기능을 추가한 인터페이스를 만들고 싶을 때 인터페이스를 상속하는 인터페이스를 만들면 된다.ILogger 인터페이스interface ILogger { void WriteLog(string msg); }ILogger를 상속받은 인터페이스interface IFormattableLogger : ILogger { void WriteLog(string msg, params Object[] args); }보이지는 않지만 void WriteLog(string msg) 메소드를 포함하고 있다.ILogger를 상속받은 인터페이스를 상속받은 클래스class ConsoleLogger : IFormattableL..

아카이빙/C# 2018.06.18

[C#] 인터페이스

[C#] 인터페이스인터페이스는 클래스 또는 구조체에서 구현할 수 있는 기능에 대한 정의를 포함한다.클래스나 구조체는 인터페이스를 상속받아 인터페이스의 기능을 정의해준다.인터페이스를 상속받은 클래스나 구조체는 인터페이스의 모든 메소드를 구현해야 한다.IEquatable 인터페이스interface IEquatable { bool Equals(T obj); }인터페이스를 상속받은 클래스public class Car : IEquatable { public string Model {get; set;} public int Year {get; set;} ​ public bool Equals(Car car) { if(this.Model == car.Model && this.Year == car.Year){ return..

아카이빙/C# 2018.06.18

[C#] 구조체

[C#] 구조체C#에도 구조체(Structure)가 있다.구조체와 클래스차이는?1. 클래스는 참조형식, 구조체는 값 형식이다. - 구조체의 인스턴스는 스택에 할당되고, 인스턴스가 선언된 블록이 끝나면 메모리에서 사라진다. 2. 클래스는 얕은 복사, 구조체는 깊은 복사 3. 클래스는 매개변수 없는 생성자 선언 가능, 구조체는 불가능 구조체 예시struct Vector3 { public float x, y, z; public Vector3(float x, float y, float z) { this.x = x; this.y = y; this.z = z; } ​ public override string ToString() { return string.Format("({0}, {1}, {2})", x, y, z..

아카이빙/C# 2018.06.18

[C#] 확장 메소드 (Extension Method)

[C#] 확장 메소드 (Extension Method)기존의 클래스를 확장하는 기법C#에서는 int, float형도 클래스이기 때문에 이를 확장하는 메소드를 넣을 수 있다.메소드를 선언하되, static 한정자로 수식해야 한다. 그리고 첫 번째 매개변수는 반드시 this 키워드와 확장하려는 클래스의 인스턴스여야 한다.public static class 클래스이름 { public static 반환형식 메소드명 (this 형식 이름, 매개변수 목록) { } } FloatExtension 예시public static class FloatExtension { public static float Square(this float myFloat) { return myFloat * myFloat; } ​ public ..

아카이빙/C# 2018.06.18