본문 바로가기

프로그래밍 언어 노트/C#

(22)
[C#/WPF] ObservableCollection, List 간의 변환 WPF 에서 ListBox, ListView등에 List 을 ItemSource 로 사용하거나 바인딩 하여 사용하는 경우가 많다. 그러나 일반적인 List 의 경우 변경된 List의 내용을 UI 에서 실시간으로 반영하지 않는다. 코드비하인드인경우는 이벤트콜백, MVVM 과 같은경우는 ICommand 등으로 실행되는것이 아니면 바로 반영되지 않고 Invoke 나 BackgroundWalker를 사용하거나 뭐 그래야하는데.. Obserable Colletion의 경우 옵저버 패턴이 적용되어 바뀌면 알아서 UI 에 반영된다. ObservableCollection 클래스 ObservableCollection 클래스 (System.Collections.ObjectModel) 항목이 추가 또는 제거되거나 전체 목록..
[C#] 공변성(Covariance)과 반 공변성(Contravariance ) 객체지향의 원칙중 하나인 LSP (리스코프 치환 원칙) 의 위키백과에는 아래와 같은 내용이 존재한다. 리스코프의 원칙은 새로운 객체 지향 프로그래밍 언어에 채용된 시그니처에 관한 몇 가지 표준적인 요구사항을 강제한다. 하위형에서 메서드 인수의 반공변성 하위형에서 반환형의 공변성 하위형에서 메서드는 상위형 메서드에서 던져진 예외의 하위형을 제외하고 새로운 예외를 던지면 안된다. 핵심단어는 공변성과 반공변성이다. 공변성(Covariance) Animal 클래스를 상속받은 Dog 클래스가 있다. Animal 과 Dog은 상속관계이므로 Animal animal = new Dog(); 이 가능하다. 그럼 IEnumerable animals = new List(); 은 가능할까? 정답은 가능하다. 그리고 자연스럽게..
[C#] Welcome To C# 9.0 [C# 9.0 변경사항 (예상)] https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/ Welcome to C# 9.0 | .NET Blog C# 9.0 is taking shape, and I’d like to share our thinking on some of the major features we’re adding to this next version of the language. With every new version of C# we strive for greater clarity and simplicity in common coding scenarios, devblogs.microsoft.com 아마 Build 2020 에서 발표된 내용인듯 하다. C#9.0의 경우 아직 릴리즈전..
[C#/Winform] ElementHost 를 이용하여 WinForm 에서 WPF 컨트롤 호스팅 이전에 https://see-ro-e.tistory.com/135 에서 Winform 컨트롤을 WPF 에서 사용하는법을 올렸는데 그반대도 가능하다. Winform 에서 ElementHost 을 드레그하여 추가하고 Chlid 를 WPF 컨트롤로 설정하면된다. 디자이너상에서 바로 설정할수도 있고, 파라미터를 받는 생성자를 위하여 코드베이스로 Child 에 수동으로 추가해도된다. (Winform 디자이너 상에서 ElementHost 를 한번 추가해준다음에 작업하자, VS 가 자동으로 관련 참조를 추가해준다) WPFControl wpf = new WPFControl(); elementHost1.Child = wpf;
[C#] C# 버전별 주요 변화 C# 6.0이후의 버전들에서 개인적으로 주요한 변화라고 생각하는 변화를 정리해 보았습니다. 비동기 계열은 주요한 변화이긴 하지만 개인적으로 그렇게 자주 사용하지 않고 필요할때 찾아보는 편이라 우선 제외하였고.. 제가 주로 사용하는 기능 위주로 정리하였습니다. 1. Overview C# 버전 최소 프레임워크 및 VS 버전 주요 변화 C# 6 .NET 4.6 / VS 2015 1. Null 조건 연산자 (?, ??), (옵서널 체이닝) 2. String Interpolation 3. 읽기전용 프로퍼티 4. Expression Member C# 7 .NET 4.6.2 / VS 2017 1. 패턴매칭 (statement) 2. 튜플 3. 디스트럭팅 4. 로컬함수 5. Expression Member C# 8 ...
[C#] 닷넷의 기본 파일 처리함수는 부정확할 수 있다 File.Delete 시 동기 함수지만 해당 함수가 끝났다고 파일이 완전히 지워진것을 보장하지 않는다. Directory.GetFiles 또한 이미 지워진 파일이 포함되거나, 포함하여 서브 디렉토리를 찾다가 오류를 발생시키는 경우가 있다. FileInfo나 DirectoryInfo 와 같이 refresh 가 포함되어있는 클래스도 똑같은 문제가 발생할수있음.. 아주 간발의 차로 이루어지는 일들 (Delete 하자마자 GetFiles 하는경우) 에서 예외가 발생할수있으며 따라서 한 스텝씩 디버깅할때는 발생하지 않아서 미쳐버린다 ㅜㅜ 아마 OS 파일시스템 관리에서 처리중에 접근하면 그런듯.. 해결방안은 Sleep ... 을 걸거나 파일 와쳐를 써야하는듯. 관련 링크 https://stackoverflow.co..
NLog 날짜별 파일 저장. https://riptutorial.com/nlog/example/24031/write-one-log-file-per-day nlog - Write one log file per day | nlog Tutorial nlog documentation: Write one log file per day riptutorial.com config 에 파일네임에 ${shortdate} 또는 ${longdate} 를 추가하면 되는듯.
[C#] LINQ는 Lazy 하다. 제목 그대로 LINQ는 lazy 하다. LINQ는 쿼리를 반환할뿐 실 사용할때 평가된다. 뭐 아무튼 그렇기때문에 Lazy 한 시퀀스를 다루는것처럼 주의 해야한다. 예전에 블로깅한 https://see-ro-e.tistory.com/222?category=849800 Lazy 한 시퀀스에서의 부수효과가 있는 함수 사용시 주의 포커 게임을 제작하다가 다음과 같은 코드를 사용했다. let Random = System.Random() type Suit = Spade | Dia | Heart | Club type Card = {suit:Suit; number:int} type Concentration = Card * bool * int let.. see-ro-e.tistory.com 와 같은 현상이 발생할수있다...