C#
-
사실 내가 맨처음 배웠던 건 4.0이었는데, 4.0에는 dynamic이나 람다같은게 추가된걸로 알고… 5.0은 잘 모르겠는데 async, await등등 이었던 걸로 기억하고… 오늘 VS를 켰는데 C# 6.0에 관한 내용이 있길래 들어가봤는데 포스팅은 4월 29일에 된거 (…) 그래서 살펴봤더니 뭔가 이건 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일단 출처 읽기 전용 프로퍼티 get만 가지고 있는 프로퍼티는 선언과 동시에 초기화하거나 생성자에서 초기화가 가능하다.(readonly와 비슷하게) 이것은…
-
용어를 뭐라고 해야할지 모르겠어서 막 써보면 커스텀 스타일은 리소스에 정의를 하고, x:Key가 존재하면 해당 키를 스타일로 참조하는 컨트롤만 적용이되고, 키를 정의하지 않으면 해당 컨트롤의 하위의 모든 컨트롤에 적용된다. 가령 다음과 같은 그리드에 버튼을 만든다고 한다. 간단히 만들어보기 다음과 같은 버튼 두개를 만든다 버튼에 스타일을 적용하기 위해서는 버튼의 상위인 그리드나 윈도우(혹은 유저컨트롤)의 리소스에 등록해야한다. 그리드에 정의를…
-
ListView나 ListBox는 하나의 객체만 바인딩하는게 아니라, 객체의 묶음을 바인딩해야하기 때문에, 데이터 클래스도 저번하고는 좀 다르게 설계해야한다. 그러기 위해서는 다음과 같은 클래스를 상속한다. 사실 저 제네릭클래스는 상속하기만 하면 상관이 없다. 여기서 T는 그냥 데이터만 저장하는 용도로만 사용해도 된다. INotifyPropertyChanged같은 것을 상속하지 않아도 상관이 없다. 테스트로 만들 WPF 어플리케이션은 다음과 같이 생겼다. ListView ListBox 입력상자 여기에 사용할…
-
웹페이지 만들면서 느꼈던 거지만 디자인패턴은 이해하기가 정말 힘든것 같다 (…..) 지난 겨울방학때 만들었던 홈페이지는 Code Igniter를 이용해서 MVC(Model-View-Controller)를 대충 봤는데 (사실 RoR로 계획하고 있었는데, RoR도 MVC였는데…?) 여튼 이번에 갑작스레 WPF를 접하게 되어서 연구실 형에게 들어보니 데이터바인딩을 해보면 신세계라고 해서 우와 나도 해봐야겠다 해서 해봤는데 아무리 생각해도 이건 윈폼에서 하던거랑 별반 다를게 없어서 조금 더 알아보고…
-
#if, #endif로 디버그와 릴리즈용 컴파일을 구별할 수 있다. [code language=”csharp”] using System; namespace CSharpConsole { class Program { static void Main(string[] args) { #if DEBUG Console.WriteLine("Debug"); #endif Console.WriteLine("Hello World!"); } } } [/code] 위 코드를 Debug로 빌드하면 Debug와 Hello World!가 모두 출력되지만, Release로 빌드하면 Hello World!만 출력된다. 그러나 위와 같이 #if/#endif블록을 나누는 것은 보기에도 안좋고,…
-
const는 컴파일 상수이다. 적용이 컴파일 시에 이루어진다. readonly는 런타임 상수이다. 적용이 런타임에 이루어진다. 이 차이를 알아보기 위해서 다음과 같은 시도를 해보았다. 1. 다음과 같은 두 상수가 정의된 클래스 라이브러리 ConstantTestLib를 만들고 dll파일 제작 [code language=”csharp”] namespace ConstantTestLib{ class MyConstant{ public const int CONST_MAX = 2500; public static readonly int RDONLY_MAX…
-
– public member field보다는 property를 이용하는 편이 낫다. 다음과 같은 클래스에 대해서 [code language=”csharp”] class Namecard{ public string name; … } [/code] name을 not null로 만들기 위해서는 여러 코드를 고쳐야한다. 그러나 프로퍼티를 이용하면, [code language=”csharp”] class Namecard{ private string name; public string Name{ get { return name; } set { if(value == null) throw new…