Programming
Interface class 에 대한 생각들..
Maintainable : - base class로써 상속 클래스에서 꼭 구현이 필요한 내용들을 알려준다.- compile 단계에서 상속 클래스의 오류 발생 가능성을 줄여준다. Extensible : - 공통된 기능을 사용하는 상속 클래스들을 Factory pattern을 이용하여 쉽게 접근 가능하도록 한다.- IBaseClass 를 만들고 이를 상속하는 여러 클래슬들을 ChildClass1, ChildClass2 --- 있다고 가정할 때에.. 모든 클래스의 접근을 IBaseClass 객체를 이용하여 참조가 가능하므로 코드의 반복성을 줄일 수 있다.
App.Config 사용하기..
.Net Framework 의 프로젝트에는 App.config 파일을 추가할 수 있다.app.config 파일을 작성하고 build를 수행하면 실행 파일의 경로에 app.config 파일이 그대로 복사가 된다. 프로그램이 실행이 될때에 app.config파일의 내용을 참조하여 runtime 시에 사용할 수 있다. 1. key 값을 설정할 수 있다. 아래와 같이 사용할 있다. 2. Library Probing 참조하는 dll 라이브러리의 경로를 임의의 지정된 폴더에서 probing 하도록 설정을 할 수 있다.
Abstraction vs Interface Class??
클래스 상속을 위해 부모 클래스를 생성할 때 고려할 수 있는 대상은 3가지가 될 수 있다. 1. standard class 2. abstract class 3. interface class 1번의 경우는 일반 클래스로 자식 클래스에서 override를 수행할 때에 부모 클래스의 함수가 수행 되므로, 특정 자식 클래스에 대한 함수를 따로 구현 할 떄에 이를 compile 단계에서 알수가 없다. 그와 반대로 2,3번의 경우는 위의 상황에 대해 compile 단계에서 에러를 발생한다. 그럼, 어떤 상황을 생각 했을 때에 abstract 와 interface 를 선택할 것인가?? 차이점을 살펴 보자. - abstract 클래스는 구현이 가능한 클래스이나, interface의 경우는 정의만 되어진 클래스이다. -..
User Setting 파일저장, 로드, 경로 지정
public class MySettings { public int MyNumber { get; set; } public string MyString { get; set; } public void Save() { using (Stream stream = File.Create(SettingsFile)) using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8)) { writer.WriteLine(MyNumber); writer.WriteLine(MyString); } } public static MySettings Load() { if (!File.Exists(SettingsFile)) return DefaultSettings; using (S..
Is & As & Cast
static void Main(string[] args) { object[] objects = { new M3(), new Hooptie(), }; foreach (M3 obj in objects) { Console.WriteLine(obj); Is(obj); As(obj); Cast(obj); Console.WriteLine("------"); } } private static void Cast(object obj) { try { M3 m3 = (M3)obj; Console.WriteLine("(M3) returned {0}", m3); } catch (InvalidCastException) { Console.WriteLine("InvalidCastException"); } } private stati..
Abstract & Virtual & Override
Abstract Method (추상 메소드) : base class에서 선언만 된다. : 파생 클래스에서 구현을 해야 한다. : abstract method 가 구현되어 있는 클래스는 abstract 제한자를 설정해야한다. ex) public abstract class MyCalss Virtual Method (가상 메소드) : base class에서 선언 및 구현이 가능하다. : 파생 클래스에서 재정의 할 있도록 되어있다. Virtual Method 사용하는 이유 : Virtual method를 선언하면, vtable이 생성되고, 이를 통해서 함수를 사용할 때 vtable을 참조하여 수행 속도를 향상시킨다. Override 재정의 : virtual, abstract method를 재정의할 때는 over..
c# winform size 자동 변경 문제.
C# winform을 사용하면서 분명히 디자인은 특정 크기로 설정하였지만, 자동적으로 사이즈가 변경이 되어 로드가 되는 경우가 있다. 이럴 때에는, form 속성의 AutoSize를 false 로 설정하면 자동으로 변경되는 문제를 해결할 수 있다. 왜냐하면, AutoSizeMode 의 설정이 변경이 되면 해당 상태에 맞추어 자동으로 다시 레이아웃 되기 때문에 사이즈가 변경이 되는 경우가 발생한다. 이는 해당 폼에 새로운 컨트로을 추가하여도 동일한 이유로 레이아웃이 변경된다.
문자열에 대한 정리 (char, wchar, tchar)
문자열에 대해서 늘 할때마다 고생을 하고 있다.. 프로젝트 속성에서 멀티바이트 또는 유니코드 중에 설정해서 문자열에 대한 처리를 생각하게 된다. 멀티바이트의 경우는 보통 한 문자를 1byte로 처리하다가 경우에 따라 2byte로 묶어서 처리를 한다. 이와 같이 그 char에 대한 크기가 고정적이지 않기 때문에 문자열이 깨지는 현상이 생길수 있다. 이에 대한 문제 해결책이 유니코드.. 유니코드는 모든 글을 2byte로 처리를 한다. 하지만 시스템 설정에 따라서 설정을 용이하게 문자열을 처리할 수 있는 것이 tchar..!! 아래와 같이 설정이 바뀐다.. #ifdef _UNICODE #define TCHAR wchar_t #define _T(x) (Lx) #define _tcscpy_s wcscpy_s #e..
Static & Dynamic Library 관련 내용..
참고 블로그.http://darkpgmr.tistory.com/50 Static , Dynamic library 사용Static library 의 경우는 .lib 파일만 로드를 하면 됨. 해당 코드를 사용되는 위치에 로드를 하는 방식으로 동작함.Dynamic은 .lib, .dll 파일 모두 필요함. 요약../MD , /MT 의 차이 설명CRT (C Runtime LIbrary)를 컴파일시에 동적라이브러리로 로드할지 아니면 정적으로 할지를 결정하는 것.따라서 외부 라이브러리가 /MD로 컴파일 되어 있고, 이를 사용하는 응용프로그램에서 /MT로 할 시에 동일한 라이브러리가 겹쳐서 로드가 될수 있음. 그에 따른 컴파일 오류가 발생함. 1. 동적 라이브러리(Dynamic Link Library)프로그램 실행 시..