본문 바로가기

728x90
반응형

C#

(22)
[Effective C#] Ch1. C# 관용어구 (2) - Equals , GetHashCode 6. 다양한 동등성 (equality) 개념들 사이의 관계를 이해하라."같다"라고 말할수있는 여러 기준과 매커니즘이 존재하고 이들을 잘 이해하고 구분해야 올바른 비교로직을 만들 수 있다.구조체, 클래스, 컬렉션, 해시 기반 자료구조, Entity 비교 등 다양한 곳에서 중요.개념의미사용 예시Reference Equality참조가 같은 객체인지Object.ReferenceEquals(a, b)Value Equality값이 같은지a.Equals(b)== 연산자오버로드 가능, 기본은 참조 비교a == bObject.Equals()런타임 타입 기반 비교, 오버라이드 가능a.Equals(b)IEquatable.Equals()성능 최적화용, 제네릭 컬렉션에서 사용list.Contains(item)GetHashCod..
[Effective C#] Ch1. C# 관용어구 (1) 1. 데이터 멤버대신 프로퍼티를 사용하기.캡슐화, 유지보수성, 확장성, 그리고 프레임워크 친화성까지 고려한 설계 원칙에 입각함.1) 캡슐화 (Encapsulation)데이터 멤버 ( public int Age; )는 외부에서 직접 접근하므로 나중에 내부 로직을 추가하기 어렵다.프로퍼티는 ( public int Age {get; setl} ) get/set에 로직을 추가할 수 있어 변화에 유연하게 대응 가능2) 디버깅과 속성 추적 용이3) 프레임워크 호환성데이터 바인딩, 직렬화, ORM, WPF들은 필드보다 프로퍼티를 선호WPF에서 INotifyPropertyChanged는 필드가 아닌 프로퍼티의 변경을 감지한다.4) 공개 API 계약의 안전성필드를 공개하는 건 클래스의 내부상태를 외부에 노출하는 것이며 ..
[Winform] SuspendLayout / ResumeLayout & PerformLayout 에 대해서 나름대로 공부를 했다고해도 자꾸 잊게 되더라..여튼 이번엔 C# winform에서 쓰이는 SuspendLayout과 ResumeLayout (PerformLayout)관련해서 [C# winform] SuspendedLayout & ResumeLayoutUI 컨트롤의 레이아웃 업데이트를 효율적으로 관리하기 위해 사용되며, 이를 통해 불필요한 리소스 사용을 줄이고 성능을 최적화할 수 있다.SuspendLayout목적: 레이아웃 업데이트를 일시적으로 중단.여러 컨트롤을 추가하거나 크기 및 속성을 변경하는 작업 중에 레이아웃 업데이트가 계속해서 발생하는 것을 방지.성능 향상: 잦은 레이아웃 업데이트로 인한 성능 저하를 줄인다.ResumeLayout, PerformLayout목적: 중단된 레이아웃 업데이트를 다시..
TextBox에 숫자만 입력하기 & 3자리마다 콤마(,) 찍기 C# Winform (윈폼)의 기본 컨트롤 TextBox에 값을 입력할 때 필요한 기능들을 정리해봤다.알고리즘매매만들다보니 보유종목별로 평균 매입단가 등을 입력하거나 출력을 위해서 필요한 기능이라 찾아봤다.프리랜서 일 구할때는 확실히 Java가 낫긴하지만, 개인 프로젝트 (사업?)을 할 때는 C# Winform 을 시작한게 나쁘진 않았다는 생각이다. 목차숫자만 입력하기 (단, 삭제를 위해선 Back space는 있어야겠지?)숫자 입력시 3자리마다 콤마 찍기 숫자만 입력하기 public static void Textbox_KeyPress_ToEnterDigit(object sender, KeyPressEventArgs e) { if(!char.IsDigit(e.KeyChar) && e.KeyChar ..
2024년 .net 기술변화에 어떤 이슈가 있는가? 사실 C# WPF의 근황에 대해 알아보다가2024년의 .net 개불관련 이슈가 있는지 한 번 더 검색을 해봤다. 목차.net 기술변화 2024년에.net 9 2024년에 나올.net 기술변화1. .NET 8 출시.NET 8은 2023년 말에 출시되었고, 2024년에는 기업과 개발자들이 이를 적극적으로 도입하고 있습니다.NET 8은 성능 개선, 안정성 강화, 새로운 기능 추가로 더욱 성숙한 플랫폼을 제공합니다.특히 Blazor의 발전으로 클라이언트 및 서버 사이드 웹 애플리케이션 개발이 한층 쉬워졌습니다.2. 클라우드 및 컨테이너화.NET은 클라우드 환경에서의 효율성을 높이기 위한 개선이 계속되고 있습니다.Azure와의 통합이 한층 강화되어, 클라우드 네이티브 애플리케이션을 보다 쉽게 배포하고 관리할 수 ..
[WPF] x: 의 의미 프리랜서하면서, C#의 윈폼 (winform)으로만 거의 먹고 살았다그래도 WPF는 어느정도 다뤄야할것같은데 그 중 x:로 시작하는 것들이 궁금해졌다. x:의미x:는 WPF와 XAML에서 x: 네임스페이스를 나타내며, XAML에서 특별한 기능을 제공하는 예약된 접두사입니다.이 네임스페이스는 XAML에서 사용되는 여러 기능과 구문을 정의하며, 주로 XAML의 마크업을 구성하거나XAML에서 사용할 수 없는 일반 C# 기능을 대체하는 용도로 사용됩니다.다음은 x: 접두사가 가지는 주요 항목과 그 의미입니다:1. x:Class설명: 현재 XAML 파일이 연결될 클래스의 이름을 지정합니다.예시: Window x:Class="YourNamespace.MainWindow" ...>이 설정을 통해 XAML 파일과 해당..
object의 DBNull처리 & List 마지막부터 가져오기 1). DBNull.Value 처리를 쉽게하기위해 object를 확장하는 부분예전에 투입되었던 프로젝트에서 본 확장 클래스/메서드 소스다.막상 써보니 유용해서 계속 기억해두려고 한다. 매번 DBNull.Value인지 확인해서 Convert를 해주었는데,이걸쓰니 DBNull.Value를 체크안하고 바로 To를 쓸수가 있었다. public static class ExtMethod { // 1) public static T To(this object obj) { if(obj is T) return (T)obj; try { if(obj == DBNull.Value) ..
[Visual Studio] 파일 선택하면 솔루션 탐색기에서 자동 이동하는 설정 개발자마다 차이는 있다만, 내가 현재 작성하는 class , 파일의 위치를 솔루션 탐색기에서 바로 보는 게 필요한 개발자도 존재를 한다. 이에 기본 옵션은 꺼져있다만 아래의 위치로 이동해서 설정을 켜 두면 된다 도구 > 옵션 > 프로젝트 및 솔루션 > 일반 > "솔루션 탐색기에서 활성화된 항목 추적" 을 체크하면 된다. 기본적으로 꺼져있기에 사용하는 사람이 적을 수는 있겠다만 알아두면 간혹 유용할 때가 있는 옵션이다.
[C#] ServiceController 클래스 관련해서 ServiceController네임 스페이스 : System.ServiceProcess (System.ServiceProcess.dll 임포트해야) 개인적으로 만드는 프로그램 중, 필수적인 서비스 (Database 등)가 실행중인지 아닌지 확인할때까 있습니다.이럴때 해당 서비스를 연결하거나 서비스 관련정보를 가져올때ServiceController라는 클래스가 존재한다는 걸 알게되었습니다. 일단 msdn의 내용을 일부 가져왔습니다. (링크) 속성 이름 내용 CanPauseAndContinue 서비스를 일시 중지했다가 다시 시작할 수 있는지를 나타내는 값을 가져옵니다. CanShutdown 시스템을 종료할 때 서비스에 알릴지를 나타내는 값을 가져옵니다. CanStop 시작한 서비스를 중지할 수 있는지의 여부..
[.Net C#] 올림, 내림, 반올림 (Ceiling, Truncate, Round) 올림, 내림, 반올림 (Ceiling, Truncate, Round) 개인적으로 프로그램을 만들다가 필요해서...System.Math 클래스에 포함된 함수들입니다. - 올림 : Math.Ceiling(double값)- 내림 : Math.Truncate(double값)- 반올림 : Math.Round(double값 [, 자릿수]) double n1 = 2.55d;double n2 = 2.44d; Console.WriteLine("Ceiling: n1= " + Math.Ceiling(n1) + ", n2= " + Math.Ceiling(n2)); Console.WriteLine("Truncate: n1= " + Math.Truncate(n1) + ", n2= " + Math.Truncate(n2)); // ..

반응형