c#

  • [c#] task를 이용한 간단한 멀티스레드 예제

    닷넷 환경에서 c#으로 멀티스레드를 구현하려면 task parallel library를 쓰는 게 제일 좋다. task를 이용하는 가장 좋은 방법은 TaskFactory.StartNew나 TaskFactory<TResult>.StartNew 메서드를 쓰는 거다. Task.Run이 더 간단하지만 이건 아규먼트를 넘길 수 없다. 아래 예제는 클래스 하나를 바인딩 리스트에 담은 뒤 새로 스레드를 만들어 여기에서 바인딩 리스트의 아이템을 바꾸는 거다. In .NET Framework 4, the TPL is the…

  • [c#] DataGridView의 선택된 셀을 파랗게 보이지 않게 하기

    DataGridView가 출력되면 셀 하나가 파랗게 선택되어져 있는 게 기본 설정이다. 이걸 보이지 않게 하려면 선택된 셀의 배경 색과 글꼴 색을 다른 셀들의 그것들로 바꾸면 된다. 속성 창을 통해 DefaultCellStyle의 SelectionBackColor는 Window로 SelectionForeColor는 WindowText로 바꾼다. SelectionBackColor를 transparent투명로 해도 되지만 이렇게 하면 글꼴이 굵게 나왔다 보통으로 나왔다 하는 버그가 있다.

  • [c#] DataGridView 헤더에 DisplayName으로 이름 출력하기

    클래스를 List 등에 담아 DataGridView에 바인딩하면 클래스의 프라퍼티 이름이 DataGridViewColumn.HeaderText가 되어 헤더에 출력된다. 하지만 대부분의 경우 프라퍼티 이름과는 다른 이름을 출력해야 한다. 이럴 땐 DataGridView애트리뷰트를 이용하면 된다.

  • [c#] DataGridView의 헤더와 셀 레이아웃 얼라인먼트(정렬)

    행이나 열의 헤더 레이아웃 얼라인먼트를 설정하려면 굳이 코드를 작성하는 거보단 속성 창의 ColumnHeadersDefaultCellStyle이나 RowHeadersDefaultCellStyle에서 alignment 값을 설정하는 게 간단하다. 칼럼 헤더의 레이아웃 얼라인먼트를 가운데로 해도 문자열은 한가운데에 출력되지 않고 오른쪽으로 해도 오른쪽 끝에 붙지 않는다. 칼럼 헤더에는 소트 기능이 있는데 칼럼 헤더를 클릭하면 헤더의 오른쪽 끝에 삼각형 두 개가 위아래로 나타난다. 이게 출력될 자리를 확보해…

  • [c#] 삼항연산자로 조건문 간결하게 하기

    삼항연산자 또는 삼항 조건 연산자ternary conditional operator ?:를 이용하면 조건문을 간결하게 할 수 있다. ternary는 ‘세 개를 한 묶음으로 하는 것’이라는 뜻이다. 예를 들면 정수를 담은 리스트가 있다. 아이템들 개수가 열 개 이상이면 앞의 열 개만 2로 바꾸고 열 개 미만이면 모든 아이템들을 2로 바꾼다. 삼항연산자를 써서 아래와 같이 바꿀 수 있다.

  • c# 액세스 모디파이어를 생략한 경우 처리되는 기본 값

    access modifier가 마이크로소프트 한글 문서에는 액세스 한정자라고 번역되어 있다. modify는 ‘수정한다’는 뜻 말고도 ‘수식한다’라는 의미도 갖는다. 형용사가 명사를 수식하듯이 대상의 뜻을 분명하게 한다는 뜻이다. 제한자라고 번역하는 건 틀리다. 마이크로소프트 문서에는 ‘특정한다specify‘고 기술되어 있다. 구글로 검색해 보면 그냥 액세스 모디파이어라고 하는 게 제일 많이 쓰인다. 액세스 모디파이어는 생략할 수 있다. 클래스의 멤버들인 경우에는 생략하면 private로 처리된다….

  • c# 캐릭터 배열 char[]를 아규먼트로 넘길 때 주의할 점

    String.ToCharArray는 인스턴스를 만든다. 아래의 코드에서 캐릭터 배열은 초기화되지 않았지만 제대로 실행된다. 캐릭터 배열은 레퍼런스 타입이므로 이걸 아규먼트로 받은 메서드에서 그 값을 수정하면 호출한 메서드에도 반영된다. String.ToCharArray를 이용하면 chars는 새로운 인스턴스를 갖게 되므로 호출한 메서드에는 반영되지 않아서 널 문자 다섯 개만 출력된다.

  • c# 클래스의 필드를 public으로 만들어 써도 되는 경우

    클래스 안에 만들어지는 프라퍼티와 필드는 데이터를 저장하는 데에 있어서는 기능하는 게 비슷하다. 이들 사이에서 어떤 걸 써야 하나 애매하다. 필드에 접근하려면 public으로 만들어야 한다. 마이크로소프트는 필드를 퍼블릭으로 만들지 말라고 한다. 필드를 퍼블릭으로 만들지 않으면 필드에 직접 접근할 수 없다. 프라퍼티를 만들어서 거쳐야 한다. 복잡하다. 프라퍼티만 만들어서도 필드를 대체할 수 있다. 뒤에 { get; set; }를…