c#
C# static (정적) 메서드와 클래스
1. C# static 메서드 정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고 직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다. 이 메서드는 메서드 앞에 static 이라는 C# 키워드를 적어 주며, 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안된다. 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다. 2. C# static 속성, 필드 정적(Static) 속성 및 필드는 위의 static 메서드와 같이 [클래스명.속성명]과 같이 사용하며, 다음 예와 같이 static을 앞에 붙여 정의한다. 클래스 내의 Non-static 필드들은 클래스 인스턴트를 생성할 때마다 메모리에 매번 새로 생성되게 되는 ..

C# Boxing Unboxing 박싱 언박싱 값>참조, 참조>값
Boxing ( 박싱 ) : 값 형식을 참조 형식으로 변환하는 것을 말한다. boxing은 암시적으로 발생한다. ( 예를 들어 int, float 를 object 로 변환하는 것을 말하는데 이 과정에서 단순 참조의 20배에 해당 하는 오버헤드와 메모리의 추가 사용이 발생한다. ) int test = 100; object tetsObj = test; UnBoxing ( 언박싱 ) : 참조 형식을 값 형식으로 변환하는 것을 말한다. Unboxing은 명시적으로 발생한다. ( 예를 들어 object를 int, float로 변환하는 것을 말하는데 이 과정에서 일반적인 할당의 4배에 달하는 시간이 소요된다. ) int test = 100; object testObj = test; int i = (int)test;..

C# 제네릭 (C++ > 템플릿)
using System; public class Test where T : class { public T Get_val(T _val) { return _val; } } public class Another { public static void Main() { Test int_test = new Test(); Console.WriteLine(int_test.Get_val(10)); } } 첫째 클래스 선언 라인에 보면 where T : class라고 명시 되어있다, Main 함수 내에 선언하고 있는건 int형이다, 따라서 아래와 같이 에러가 뜬다. C++와 가장 큰 차이점은 C#의 템플릿은 제약 사항이 많다는 것이다, SFINAE도 있겠지만 가장 큰 특징은 추상화를 할 수 없다는 점이다 따라서 아래는 에러..
C# Delegate Event 사용법
delegate 는 메서드를 가리킬 수 있는 타입의 간편 표기법. event도 간편표기법. event를 사용하면 정형화된 콜백 패턴을 구현하려할때 코드를 줄일 수 있음. - 조건 1. 클래스에서 이벤트(콜백)를 제공한다. 2. 외부에서 자유롭게 해당 이벤트(콜백)을 구독하거나 해지하는 것이 가능하다. 3. 외부에서 구독/해지는 가능하지만 이벤트 발생은 오직 내부에서만 가능하다. 4. 이벤트의 첫번째 인자는 이벤트를 발생시킨 타입의 인스턴스다. 5. 이벤트의 두번째 인자는 해당 이벤트에 속한 의미 있는 값이 제공된다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadi..

C# 사용자 정의 전환 연산자(암시적/명시적)
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.ComTypes; namespace ConsoleApp8 { public struct s_data { public string name = ""; public int hp = 0, mp = 0; public s_data() { } // 데이터 대입 public s_data(string _name, int _hp, int _mp) { name = _name; hp = _hp; mp = _mp; } } // 기본 캐릭터 클래스 public class Character { public s_data data = new s_dat..
C# LINQ
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.ComTypes; namespace ConsoleApp8 { class Profile { public int height; public string name = null; } class Program { // foreach로 해당 데이터들 접근가능, 람다식 형식이여야됨. // from : 데이터를 어디서 가져오는지 지정해주는 메소드, 대체 메소드 없음. // where : 가져온 데이터들에 조건을 거는 메소드, .Where()로 대체 가능. // let : // orderby : 가져온 데이터들을 정리해주는 메소드, as..
C# 형변환 is as 키워드
is는 객체가 해당 형식에 해당하는 지를 검사하여 bool 값을 결과로 반환. as는 형 변환 연산자와 같은 역할을 하지만, 형변환 연산자가 변환에 실패하는 경우에는 예외를 던지는 반면, as 연산자는 객체 참조를 null로 만든다. using System; class Mammal{} class Dog : Mammal{} class Cat : Mammal{} Mammal m1 = new Dog(); Dog dog; Cat cat; if(m1 is Dog) { dog = (Dog)m1; Console.WriteLine("m1 is dog"); } else Console.WriteLine("m1 is not dog"); if (m1 is Cat) { cat = (Cat)m1; Console.WriteLine..