[C#] Question

Lingtea_luv·2025년 4월 20일
0

C#

목록 보기
32/37
post-thumbnail

Question?


C# 관련 개념에서 의문이 생긴 것들을 정리한 글이다. 공부를 시작하는 시점부터 했어야 의미가 더욱 컸을 것 같지만, 지금이라도 조금씩 추가해보려고 한다.

해결이 된 경우 노란색으로 아직 안됐을 경우 민트색으로 표시해서 구분!!

C#


Q1. Singleton 제네릭 구현에서 해당 코드에 에러 발생

public class Singleton<T>
{        
	private static T instance;
	public static T Instance
	{
  	    get
		{
			if (instance == null)
    		{
    			instance = new Singleton();  // 오류
        	}
       		return instance; 
    	}
	}
}    

A. where T : Singleton<T>, new() 를 사용하여 해결 → 제네릭 형식 제약

public class Singleton<T> where T : Singleton<T>, new()
{
    private static T instance;
    public static T Instance
    {
        get { return instance; }
        set { instance = value; }
    }

    public static T GetInstance()
    {
        if (instance == null)
        {
            instance = new T();
        }
        return instance;
    }
}

Q2. prototype에서 인터페이스 구현을 과정에서 override를 할때 반환형을 object를 써야하는걸까?

public interface ProtoType
{
    public abstract object Clone();
}

하지만 이렇게 하면 복제를 하기 위해 Clone을 사용할 때마다 언박싱을 해줘야하는데...

Monster monster = new Monster();
Monster monster0 = monster.Clone() as Monster;

A. Prototype<T>로 구현해보자.

public abstract class Prototype<T>
{
    public abstract T Clone();
}

Q3. 클래스 내부에서 배열을 선언하고 요소를 추가할 때 반드시 new 키워드를 통해 초기화를 해야하는 이유?

public static class Player
{
	public static List<int> arrList;
	public static void Move
    {
        arrList.Add(3);   // 에러
	}
} 

A. 참조 타입의 경우 new 키워드로 힙영역에 공간을 생성해야 데이터 저장(할당)이 가능하다.

Q4. Property에서 둘의 차이는??

public int level { get; private set; }

  
private int level;
public int Level
{
   get { return level; }
}

A. 똑같다. 위가 아래의 약식 표현이라고 생각해도 무방.

Q5. Property에서 둘의 차이는??

public int value { get; }
  
  
public readonly int value;

A. 똑같다.

Q6. 순환 연결 리스트에서 fisrtlast node를 확인하는 방법?

profile
뚠뚠뚠뚠

0개의 댓글