본문 바로가기
반응형

C#52

[C#] 제네릭 형식 제약조건 제네릭(Generic)은 특정 데이터 타입에 국한되지 않고 모든 타입을 허용하는 타입이지만, 특정 조건에만 대응되는 데이터 타입이 필요한 경우 where 키워드를 사용하여 제약 조건을 추가할 수 있으며 제약조건을 만족하지 않는 경우 컴파일에러가 발생하도록 할 수 있다. 모든 타입을 허용하는 제네릭 클래스 class GenericClass { public T member {get; set;} } class Program { static void Main(string[] arg) { GenericClass genericObj1 = new GenericClass(); GenericClass genericObj2 = new GenericClass(); GenericClass genericObj3 = new Ge.. 2022. 9. 30.
[Effective C#] Item 18 반드시 필요한 제약 조건만 설정하라 타입 매개변수에 대한 제약 조건(constranint)은 클래스가 작업을 올바르게 수행하기 위해서 타입 매개변수로 전달할 수 있는 타입의 유형을 제한하는 방법이다. 올바른 작업을 수행하기 위한 제약조건의 수가 늘어나면 개발자가 이를 만족시키기 위해서 수행해야 하는 작업의 양이 늘어나서 이 균형을 유지하는 것이 중요하다. 제약 조건을 설정하지 않으면 런타임에 더 많은 검사를 수행하고 더 자주 형변환을 해야 하고, 리플렉션을 사용해야 할 가능성이 커지낟. 제약 조건을 과도하게 설정하면 해당 클래스를 사용하기 위해 과도하게 추가 작업을 해야한다. 제약 조건 왜 사용하나? 제약 조건을 설정하면 컴파일러는 System.object에 정의된 pbulic 메서드보다 더 많은 것을 매개변수에 기대할 수 있게된다. 하지.. 2022. 9. 30.
[Effective C#] Item17 표준 Dispose 패턴을 구현하라 이번 포스팅은 메모리가 아닌 다른 유형의 비관리(Unmanaged) 리소스를 포함하는 타입을 작성할 때 리소스 관리를 어떻게 해야 할지를 살펴보는 파트다. 우선 간단하게 비관리 리소스가 무엇인지 살펴보자. 비관리 리소스 : 메모리가 아닌 자원을 말하며, 윈도우 핸들, 파일 핸들, 소켓 핸들 등 시스템 자원을 뜻한다. 반대로 관리 리소스에는 new List()등, 메모리 처럼 쓰는 자원을 말한다. 이런 비관리 리소스들은 가비지 콜렉터가 아닌 개발자가 직접 관리해줘야 한다. 이미 .NET 프레임 워크에는 비관리 리소스를 정리하는 표준화 된 패턴을 사용하고 있다. 그것이 바로 Dispose 패턴이다. Dispose 패턴 왜 사용해야 되냐? 우선 Dispose 패턴은 앞서 말했듯 비관리 리소스를 관리하기 위한 .. 2022. 9. 13.
[Effective C#] Item16 생성자 내에서는 절대로 가상함수를 호출하지 마라. 객체가 완전히 생성되기전에 가상함수를 호출하면 이상동작을 일으킨다. 어떤 타입이든 생성자가 수행을 완료하기 전에는객체가 와전히 생성되었다고 할 수 어ㅃㅅ으므로 생성자 내에서 가상함수를 호출하면 개발자의 예상과는 다르게 코드가 흘러갈 수 있다. class B { protected B() { VFunc(); } protected virtual void VFunc()//가상함수 { Console.WriteLine("VFunc in B"); } } class Derived : B { private readonly string msg = "Set by Initializer"; public Derived(string msg) { this.msg = msg; } protected override void VFunc(.. 2022. 8. 30.
반응형