본문 바로가기

프로그래밍/C#

(8)
Rider의 Delegate subtractions warning public sealed class SomeViewClass { public void BindEvent() { GetModel()?.UpdateEvent += OnModelUpdated; } public void ReleaseEvent() { GetModel()?.UpdateEvent -= OnModelUpdated; } } 위와 같이 코드를 짜면 ReleaseEvent 부분에서 Rider의 경고가 뜬다. Delegate subtraction을 주의하라는 경고인데, 이게 왜 주의해야할 대상인지 몰라 Rider 도큐먼트를 찾아보았다. 찾아본 결과 당연히 저런식으로 사용하는 것 자체는 문제가 없고, Rider에서 경고하고 싶었던 것은 delegate subtraction에서 발생할 수 있는 미묘한 문제들이었..
Welcome to C# 9.0 - Init-only properties & record 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 Init-only properties property에 "init" 키워드를 지정할 ..
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 분명 C# 처음 공부할 때 6.0이었는데...
[NDC] 이놈의 enum의 박싱을 어찌할꼬 (동영상링크) https://www.youtube.com/watch?v=pP9R58fQo_k 한번 쭉 봤는데 가볍게 보기 좋고 정리하기도 좋은 내용이라 나중에 정리해야지.
CLR via C# 23장 어셈블리 로딩과 리플렉션 Notion에서 보기 이번 장에서는 컴파일 타임에 전혀 알지 못했던 타입에 대해 타입의 세부 정보를 알아내고 인스턴스를 생성하는 등의 방법(리플렉션)에 대한 것을 배운다. 이는 주로 동적으로 확장 가능한 프로그램을 만들 때 활용되는 기법이다. 동적으로 확장 가능한 프로그램은 22장에서 살펴본 CLR 호스팅과 앱도메인의 장점을 활용할 수 있다. 호스트는 고유의 앱도메인 내에서 다른 앱도메인의 코드(애드인 등)를 수행할 수 있고 또 언로드할 수 있다. 어셈블리 로딩 컴파일 타임에 JIT 컴파일러가 IL을 컴파일하다 보면 어떤 타입들이 참조되고 있는지를 알게 된다. 그리고 런타임에는 참조되고 있는 타입들이 어느 어셈블리에 정의되어 있는지를 확인하기 위해서 TypeRef, AssemblyRef 메타데이터 테이블..
CLR via C# 9장 매개변수 선택적 매개변수와 명명된 매개변수 메서드를 선언할 때, 매개변수에 기본값(default)을 설정할 수 있다. 이렇게 매개 변수에 기본값을 설정한 매서드를 호출할 때에도 매개변수를 선택적으로 사용할 수 있다. 이 떄 이 선택에 누락된 매개변수는 기본값이 대입된다. 메서드를 호출할 때 특정 매개변수의 이름을 지정하여 호출하는 것도 가능하다. 매개 변수에 기본값을 지정할 때의 규칙과 가이드라인. 메서드, 생성자 메서드, 인덱서 (this[int idx] 로 접근하는 메서드)와 같이 매개변수가 존재하는 프로퍼티, 델리게이트를 사용할 경우 기본값을 지정할 수 있다. 기본값이 있는 매개변수는 C++과 동일하게, 기본값이 없는 매개변수보다 앞에 와야 한다. 기본값은 컴파일 타임에 알 수 있는 값이어야 한다. 레퍼런스..
CLR via C# 2장 빌드, 패키징, 배포, 응용프로그램과 타입의 관리 .NET Framework 배포 목표 지난 수년간, Windows는 불안정하고 복잡한 운영체제라는 인상이 있었다. 1. DLL지옥 실행되는 응용프로그램들이 여러 제조사가 만든 코드를 실행하기 때문에, 만들어 놓은 코드 조각이 누구에 의하여 어떻게 사용될 것인지 확실히 알수 없음. 사용자들은 프로그램을 업데이트하고 새로운 파일을 배포받을 때마다 문제를 겪을 수 있다. 시스템 DLL의 응용프로그램을 설치할 경우 다른 버전의 DLL로 덮어 씌워진다던지, 하는 문제. (Windows 2000 이후 Windows File Protection 기능을 통해 대부분 해결되었다고 함.) 2. Windows 설치가 복잡하다고 여겨진다. (Windows에서의 응용프로그램 설치) 대다수의 응용프로그램들은 설치 후에 시스템의 ..
CLR via C# 17장 델리게이트 17장 델리게이트. 델리게이트 살펴보기. 이번 장에서는 콜백 함수라는 프로그래밍 메커니즘에 대해서 이야기하려고 한다. .NET Framework는 이 매커니즘을 델리게이트라는 형태로 노출하고 있다. 네이티브 C/C++에서 비멤버 함수의 주소는 단지 메모리 주소일 뿐이다. 이 주소는 다른 정보를 일절 포함하지 않는다. (함수 시그니쳐, 함수 호출 규칙 등의 정보) .NET Framework는 이와 같은 델리게이트라는 타입 안정성을 준수하는 메커니즘을 제공한다. using System; using System.IO; internal delegate void Feedback(int value); public sealed class Program { static void Main(string[] args) { ..