개발

  • #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블록을 나누는 것은 보기에도 안좋고,…

  • as, is operator 캐스팅 연산자를 이용한 강제적인 형변환은 예기치못한 결과를 가져올 수 있다. 특히, 이미 정의된 C#의 몇몇 메서드는 System.Object를 다루기 때문에 레퍼런스 타입 변수는 더욱 조심히 다루어야 한다. 레퍼런스 타입의 변수에 대해서 캐스팅 연산자 (type_name)보다는, as 연산자를 쓰는 것이 좋다. as연산자는 “피연산자인 객체가 해당 타입으로 형변환이 가능하다면 형변환”한다. 캐스팅 연산자 ()와의 차이는 다음과 같다.…

  • 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…