Effective C# 5

[Effective C#] new 한정자 사용

Effective C# 아이템 10 : 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라. public class MyClass { public void MagicMethod() { Console.WriteLine("MyClass"); } } public class MyOtherClass : MyClass { public new void MagicMethod() { Console.WriteLine("MyOtherClass"); } } 베이스 클래스에서 virtual로 선언한지 않은 멤버를 상속받은 클래스에서 new 한정자를 통해 재정의할 수 있다. 재정의를 통해 구현이 가능하지만 사용자에게 모호함을 줄 수 있다. object c = MakeObject(); MyClass cl = c as M..

개발/C# 2021.01.29

[Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라

문자열 보간 기능 -> 링크 문자열 보간 기능 '$'을 이용하여 생성된 문자열은 1)단순 문자열일 수도 있지만, 2)FormattableString을 상속할 타입일 수도 있다.1)문자열 : 문자열 자체string first = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";2) FormattableString : format문자열과 format에 구성될 argument로 구성(MS)FormattableString second = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";*FormattableString 객체라면 컴퓨터에 지정된 문화권을 고려하여 문자열을 생성할 ..

개발/C# 2021.01.21

[Effective C#] string.Format()을 보간 문자열로 대체하라

String.Format 메서드 (링크) String s = String.Format("The current price is {0} per ounce.", pricePerOunce); Console.WriteLine(s); 생성된 문자열을 직접 출력해보고 올바른 형태인지 직접 확인하기 전까지 코드를 제대로 작성했는지 확인이 어려움 - 포맷 문자열과 인자리스트를 분리하여 전달 - 포맷 문자열에 나타낸 인자의 개수와 실제 전달되는 인자의 개수가 일치하는지 확인하지 않음. - 개발자의 실수로 누락하여 런타임 에러가 발생할 수 있음 $ 문자열 보간 (링크) string name = "Mark"; var date = DateTime.Now; // Composite formatting: Console.WriteLi..

개발/C# 2021.01.17

[Effective C#] const보다는 readonly 사용하기

const보다는 readonly 사용하기 const - 컴파일 타임 상수, 컴파일 타임에 변수가 값으로 대체된다. readonly - 런타임 파일 상수, 런타임 타임에 값이 평가된다. 컴파일 타임에 값으로 대체되지 않고 상수에 대한 참조로 컴파일 된다. //컴파일 타임 상수: public const int Millennium = 2000; //런타임 상수: public static readonly int ThisYear = 2004; const 예제) if (myDateTime.Year == Millennium) 위 코드는 컴파일시 아래와 같이 컴파일 된다. if (myDateTime.Year == 2000) - const는 컴파일 시점에 값이 대체, readonly의 경우엔 const처럼 값으로 대체되..

개발/C# 2021.01.13

[Effective C#] C# 정적 클래스 멤버 초기화 유의사항

정적 멤버 변수를 포함하는 타입이 있다면 인스턴스를 생성하기 전 반드시 정적 멤버 변수를 초기화 하여야한다. C#에선 '정적 멤버 초기화'와 '정적 생성자' 두가지를 제공한다. * 정적 변수를 초기화하기 위해 인스턴스 생성자나 전용의 private 메서드 혹은 다른 관용구를 사용해서는 안된다. 정적 멤버 초기화 - 인스턴스 멤버 초기화와 마찬가지로 정적 멤버를 간단히 초기화하는 경우라면 정적 생상자보단 멤버 초기화 구문을 사용하는 것이 좋다. - 정적 생성자가 호출되기 이전에 실행되며, 베이스 클래스의 정적 생성자보다도 먼저 호출된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class MySingleton { private static reado..

개발/C# 2020.12.31
반응형