닷넷에서는 몇 가지 형변환 방법이 있는데 그중 괄호로 사용하는 캐스팅 방법은 다른 언어에서도 사용하는 방법이고 이전부터 사용하던 방법입니다. 예> 예> object oTemp = new object(); oTemp = 3.0; dTest = (double)oTemp; 1. 문제의 발견 그런데 형 변환을 하다가 이상한 에러를 발견하였습니다. 'object'형을 'float'로 캐스팅을 하니 에러가 빵~ object oTemp = new object(); oTemp = 3.0; double dTest = 1.0; float fTest = 1.0f; dTest = (double)oTemp; fTest = (float)oTemp; 흠? 오류의 말은 써있는 데로 "형변환이 안 되니 확인해 봐라" 입니다. 원래 '..
저장 프로시저를 이용할 때 리턴되는 값은 크게 리턴(Return)과 셀랙트(Select)로 나눌 수 있습니다. 리턴은 int형만 가능하고 일반적으로 프로시저에 대한 응답(로그인 중이라면 로그인이 안 된 이유 같은 것들)용으로 많이 사용합니다. 셀랙트는 말 그대로 데이터(테이블)를 리턴하는 것이고요. 1. SQL 작성 리턴과 셀랙트를 구분 안 하는 경우도 있습니다만 구분해서 쓰면 처리하기도 편해지고 코드도 일관성 있어저서 좋습니다. --Return과 Select를 구분한 경우 Select 1 Return 2 --결과 --Select : 1 --Return : 2 --Return과 Select를 구분하지 않은 경우 Select 1 Return --결과 --Select : 1 --Return : null 일반..
전통적인 C# 프로그램에서 프로그램을 종료시킬 때 사용하는 방법은 Application.Exit(); Environment.Exit(0); System.Diagnostics.Process.GetCurrentProcess().Kill(); 이렇게 많이 사용합니다. (참고 : [.NET] 응용프로그램 종료 메서드 비교 ) 가끔 창이 하나이거나 메인 폼이 중심이 되는 경우 아래와 같이 사용할 때도 있습니다. this.Close(); 그러다 문득 "WPF에서도 똑같은가?" 라는 의문이 들었습니다. 연관글 영역 윈폼(WinForm) 메서드 시도 WinForm과 WPF와는 미묘한 차이가 있는데 이런 것들은 사실 직접 격기 전에는 알기가 힘듭니다. 그래서 한번 해보았습니다. 'Application.Exit();'를 ..
mvvm패턴 샘플을 인터넷에서 찾아 만드는데 'ICommand'를 상속하여 오버라이드(재정의, ovrride)를 하려고 하니 다음과 같은 에러 메시지가 나옵니다. 재정의할 적절한 메서드를 찾을 수 없습니다(no suitable method found to override) 1. 오류의 원인 MSDN을 뒤져보니 "컴파일러 오류 CS0115"라는 것이 있군요. (참고 : MS Docs - 컴파일러 오류 CS0115 ) 설명의 뜻은 1) 베이스로 지정안되있는 녀석을 오버라이드를 시도했거나 2) 오버로드를 해야 하는 녀석(파라메타가 다르다던가 이름이 다르다던가) 해야 할 녀석을 오버라이드 했다 입니다. 2. 해결 방법 결국 해결법은 1. 올바른 베이스를 지정한다. 2. 'override' 키워드를 뺀다.(오버라..
개발이 막바지에 오고 기능구현 단계가 지나가면 최적화 작업을 하게 됩니다. 이때 각 구간별로 시걸린 시간을 측정하는 것이 중요하죠. 이 걸린시간을 기반으로 어디를 어떻게 수정해야할지 계획을 잡을수 있으니까요. 이때 사용하는것이 디버깅 메시지와 틱(Tick)입니다. 틱은 자신의 컴퓨터에서 시간을 계산하는 최소 단위입니다. 보통 1틱은 100나노초( == 1/10000000 )입니다. 닷넷에서는 DateTime.Now.Ticks 이렇게 해서 가저 올수 있죠, (참고 : MSDN - DateTime.Ticks 속성) 디버깅 메시지는 일반적인 툴들에서 모두 지원하는 기능으로 개발툴의 콘솔화면(혹은 특정 화면)에 개발자가 심어놓은 메시지를 출력하는 기능입니다. 닷넷에서는 Debug.WriteLine("메시지");..
XML을 다루다 보면 노드를 통으로 복사하거나 옮겨야 할 때가 있습니다. 닷넷에서는 그런 동작을 할 때 'ImportNode'를 사용합니다. (참고 : MSDN - ImportNode ) 이전 글에서 처럼 테스트 데이터를 도큐먼트로 생성하여 사용합니다. 연관글 영역 1. 테스트 데이터 1-0 2-0 3-0 1-1 3-1 1-2 2-2 3-2 2. 노드(Node) 복사 노드(Node)를 복사하기 위해서는 1) 복사하려는 노드를 찾는다. 2) 'ImportNode'로 해당 로드를 복사한다. 3) 대상에 복사된 노드를 추가시킨다. 이런 순서로 하게 됩니다. //도큐 생성 XmlDocument xDocOriginal = new XmlDocument(); xDocOriginal.LoadXml(sDataOrigin..
비주얼 베이직(Visual Basic, VB)에서 편하게 썼던 문자열 처리 함수가 Mid를 비롯한 Left와 Right입니다. Mid : 문자열에서 지정된 인덱스에서부터 지정된 개수만큼 문자열 반환 Left : 왼쪽서부터 지정된 개수만큼 문자열 반환 Right : 오른쪽에서부터 지정된 개수만큼 무자열 반환 C#에는 'Mid'역할을 하는 'Substring'가 있는데 이것을 이용하여 'Left'와 'Right'를 구현할 수 있습니다. 물론 예외처리를 위해 'Mid'도 구현하면 좋죠 ㅎㅎㅎ 그 방법 외에도 'VB'를 참조하여 직접 'Mid', 'Left', 'Right'를 가져와 사용할 수도 있습니다. 참고로 'Mid'의 시작 위치는 1부터 시작합니다.(0부터 시작하면 에러가 남) 그러니 인덱스 방식으로 사..
디버그 심볼이란것은 빌드를 할때 디버깅이냐 릴리즈이냐에 따라 특정코드를 빼고 넣고 하는 기능입니다. 예를 들면 디버깅 할때는 A_DEV라는 클래스를 참조하여 디버깅이 쉽게 할수 있지만 릴리즈때는 A클래스를 참조 시켜 퍼포먼스 최적화를 노린다던가 할때 사용합니다. 저는 디버깅용 모듈을 만들어 쓰는 것을 좋아해서 디버깅 심볼을 자주 쓰진 않았습니다. 디버깅용 모듈을 만들면 릴리즈모드에서도 특정동작으로 디버그 메시지 같은 것을 출력할수 있게 하여서 디버깅이 쉽게 할수 있다는 장점 때문이죠 ㅎㅎㅎ 프로그램이 무거워 진다는 단점이 있지만 OTL 실버라이트로 넘어오니 웹서비스때문에 디버그 심볼을 자주 이용하게 되서 정리해 둡니다. 1.디버그 심볼 지정하기비주얼 스트디오에서 프로젝트 속성 > 빌드 > 조건부 컴파일 ..
다른글에서 닷넷은 다중상속이 안되니 조부모 상속을 이용하라고 하였습니다. ( 참고 : [.Net] 다중상속이 안된다면 할아버지 상속이다!! - 여러개의 베이스를 상속받기 ) 그런데 WPF나 실버라이트의 경우 컨트롤의 조부모 상속을 해보면 에러가 납니다. 'HumanLevel.TabHead.ucTest'의 partial 선언에는 서로 다른 기본 클래스를 지정할 수 없습니다. 완전 수수께끼 같은 오류메시지 입니다-_-; 이 오류는 .xmal과 .cs파일간에 같은 다른 상속을 받기 때문에 발생하는 오류입니다. 위 자물파일을 확인해보면 컨트롤이 UserControl로 선언 되있음을 알수 있습니다. 이 부분이 베이스랑 일치해야 합니다. 그러면 UserControl를 교체해봅시다. 1. The tag 'baseTa..
닷넷이나 자바 같은 객체지향(Object-Oriented Programming, OOP) 언어에서는 다중상속이 되지 않습니다. 'C++'에서는 다중상속은 권장하지 않습니다. 부모가 여럿이면 어느 유전자가 어디서 왔는지 추적하기가 힘들기 때문입니다. 만약 다중 상속을 하려고 하면 다음과 같은 메시지가 나옵니다. 'WpfApplication1.MainWindow' 클래스는 여러 개의 기본 클래스('System.Windows.Window' 및 'baseTest')를 가질 수 없습니다. 개족보 만들지 말라는 오류입니다 ㅡ,.ㅡ; 1. 필요성 그런데 프로그램을 만들다 보면 베이스를 여러 개 만들어야 할 경우가 생깁니다. 대표적인 경우가 툴에서 생성해주는 컨트롤에 베이스를 붙일 때입니다. 둘다 이미 'Window'..