목록C# (38)
아디봉의.net
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; //
객체지향의 중심은 객체에 있다. 객체지향에서는 모든 것이 객체와 객체사이의 연관으로 이루어진다. 객체란? 우리가 표현할수 있는 실세계의 모든 사물들을 객체(또는 오브젝트)라고 한다. 명사의 성질을 가진 모든 사물들이 객체로 구분지을수 있겠다.
이벤트 코드 생성기 1.4 버전에 추가된 히스토리 기능은 이전에 생성한 이벤트 이름과 매개변수 쌍을 기억하는 기능입니다. 이 기능을 어떤 식으로 구현하는 것이 좋을까요? 아마도 클래스가 있는 언어를 사용한다면 히스토리를 관리하는 클래스를 만들어 관련된 모든 로직을 캡슐화하는 것이 정석일 것입니다. 구체적으로 이 클래스가 할 일을 정리해 본다면, 히스토리를 추가한다. 다만 추가할 수 있는 갯수에는 제한이 있어 최대값에 도달하면 선입선출 식으로 제거된다. 추가된 히스토리를 삭제할 필요는 없다. 히스토리 목록을 저장소(여기에서는 파일 시스템)에 저장하고 저장소에서 불러온다. 윈폼의 BindingSource 객체의 DataSource로 지정될 수 있다. (즉 히스토리 목록을 열거할 수 있다.) 프로그램 전반에 ..
오늘은 OOP의 이론 중의 하나인 분할 정복에 대해서 (예제를 만들어 보며) 이야기 해보겠습니다. 아시다시피 ‘분할 정복’이란 커다란(복잡한) 문제를 작은(단순한) 문제들로 나눈 후, 나뉜 작은 문제들의 해를 구한 다음에, 이를 다시 결합하여 원래 문제의 해를 구하는 방법을 말합니다. 이는 OOP에서 말하는 캡슐화의 기반이 됩니다. 즉 수 많은 작업(메서드)이 있더라도 이를 몇 개의 클래스로 묶어 클래스 내부에서 처리하도록 하면(단순해진 작은 문제의 해를 구함), 외부에서는 각 클래스가 하는 일에 대해 구체적으로 알 필요가 없이 클래스 간의 통신만 관리하는(작은 문제들의 해를 결합) 식으로 문제를 단순화시킬 수 있다는 것입니다. 여기서 중요한 것은 클래스 간의 ‘통신’(OOP 용어로는 메시지 전달) 입니..
Delegate 유언장 과 같은기능이다. 유언장에는 일련의 지시들이 있다. 예를 들면 고지서에 요금을 내고, 자선단체에 기부도 좀하고 나머지는 내고양이에게 물려준다. 이유언장은 죽기전에 써야하고 안전한곳에 잘두어야 하며 , 죽고난후에 대리인이 이 유언장의 내용을 처리해준다. 즉 적절한 시점에 실행되어야 할 이련의 일들이라는 것이다. 리턴타입과 타입파라미터만 같다면, 조건에 맞는다면, 어떠한 메소드라도 실행시킬 수 있다. 특정한때 --> 이벤트 가 갑자기 떠올라야한다. ^^ 선언 : delegate void simpleDelegate(); 선언된 것중 delegate만 제거하면 메소드 랑 같다. c언어에서라면 함수(실제로는 함수포인터라고 할 수 있지만 형태는 함수의 형태와 같다.)라고 할수 있다. 리턴타입..
1.1 소스코드 class Program { string name; public string Name { get { return name; } } decimal price; public decimal Price { get { return price; } } public Program(string name, decimal price) { this.name = name; this.price = price; } public static ArrayList GetSampleProducts() { ArrayList list = new ArrayList(); list.Add( new Program("전남에 물폭탄 털어지붓다..", 3.4m)); list.Add(new Program("이런저런!! ",1.1m)); l..
제네릭(클래스나 메서드에 사용할 타입을 파라미터화 할수 있게 해준다는것 ) 일반메서드 안에서 사용할 값을 넘기는 것과 비슷하게 제네릭 타입과 메서드에서 사용할 타입을 지정할 수 있도록 파라미터들이 있다. 제네릭이 필요한 이유라면 C#1에서 소스코드에서 캐스팅을 많이 최소화 하기위함 이라고 할수 있겠다. 보통 캐스팅은 변수나 메서드 선언하는 시점에 하는데 제네릭을 사용하면 사용자 올바르지 않은 캐스팅을 막을수 있다. 또 제네릭에서 제공하는 새로운 정보를 이용하면 생산성을 높일수 있다. 더많은 검사가 컴파일시에 일어난다. 일반적인 타입사용하는장소에 타입파라미터(실제타입을 대입할수있는장소)를 대신사용한다. 타입파라미터는 제네릭 선언부의 꺽쇠()괄호 사이에 넣어주고 여러개의 파라미터는 , 콤마를 이용해 구..
1-1 SqlTransaction 을 이용한 방법 SqlConnection conn = new SqlConnection(커넥션 스트링); conn.Open(); SqlTransaction transaction = new SqlTransaction(); SqlCommand command = new SqlCommand(); command.Transaction = transaction; try{ command.CommandText = “insert into ….”; command.ExecuteNonQuery(); command.CommandText = “update xxx set …….. where … “; command.ExecuteNonQuery(); transaction.Commit(); }catch(E..
3tier 로 구성된 프로그램을 구현해서 사용중이다. 에러를쫓다보니 com+에서 나는것같다. 방법을 찾던중 팀장님께 대단한걸 얻어냈다. 알고계신분이 많을꺼같다고 생각하지만 내가 또 까먹을까봐서 적어놓아야겠다. ㅋ 일반 visual studio tool 에서 디버깅 할수 있는데 com에서도 그걸 할수 있더라,, 간단하게 말하면 com이 떠있을때 프로세스번호로 잡아서 디버깅을하는방식,, 그림으로 보면 쉽게 이해할수있다. 참고로 하위버전인 닷넷1.1로만들어놓은것이다. 비주얼스튜디어 2003이다. ;;쪽팔리넹 내가 4.0으로 싹 엎어버릴예정이다.;; ㅋ 말안해도 이해할것이다. "구성요소 서비스"를 펼친상태이다. 등록된컴을 실행시켜서 저기서 프로세스 번호를 알아낼수 있다. visual studio tool 에서 ..
트랜잭션이 이미 암시적 또는 명시적으로 커밋되거나 중단되었습니다. 해결방안 -> 1)connectionstring 뒤에 "enlist=false" 구문 붙여서 하면 된다. 2) 구성요소서비스 - 컴퓨터 - 내컴퓨터 속성에서 MS-DTC 탭 클릭 보안구성의 모든 항목 체크 (라디오 버튼 중 인증필요없음 선택)2. 실행 - regedit 입력 후 HKEY_LOCAL_MACHINE -> Microsoft -> MSDTC TurnOffRpcSecurity의 DWORD값을 1로 설정 (없을 경우 만들어줄 것)3. 방화벽 해제4. MSDTC 시작 출처 : http://blog.naver.com/beling?Redirect=Log&logNo=20042593139