나는 (내가 작업하고있는 게임에서 엔티티를 저장하기 위해) 3 개의 다른 연결된 목록의 클래스가 있습니다. 목록은 모두 동일한 기본 유형을 가진 객체이지만 처리상의 이유로 별도로 유지합니다. IEntity, IObject 및 IUndead는 모두 IEntity에서 상속받습니다.C#, 클래스 내의 다른 목록에 액세스하는 일반적인 방법
public class EntityBucket
{
public LinkedList<IEntity> undeadEntities;
public LinkedList<IEntity> objects;
public LinkedList<IEntity> livingEntities;
public EntityBucket()
{
undeadEntities = new LinkedList<IEntity>();
objects = new LinkedList<IEntity>();
livingEntities = new LinkedList<IEntity>();
}
public LinkedList<IEntity> GetList(IObject e)
{
return objects;
}
public LinkedList<IEntity> GetList(IUndead e)
{
return undeadEntities;
}
public LinkedList<IEntity> GetList(ILiving e)
{
return livingEntities;
}
}
현재 각 매개 변수를 기반으로 각 목록을 검색하는 3 가지 방법이 있습니다. 각 목록이 어떤면에서 또는 다른 방식으로 자체 접근자를 요구한다는 것을 알고 있기 때문에 3이 있다는 사실은 좋습니다. 인스턴스화 된 객체를 전달하는 것은 이상적이지 않습니다. 유사한 유형의 객체를 사용하지 않고 어딘가에서 목록을 검색하려고 할 수 있습니다. 여기에있는 객체는 GetList 메소드에서도 사용되지 않으며, 사용할 버전을 결정하기위한 용도로만 사용됩니다.
public void Delete(IUndead e, World world)
{
.....
LinkedList<IEntity> list = buckets[k].GetList(e);
.....
}
난 항상 손에서 인스턴스화 된 객체가 없을 수로 (예를 들어, 개체를 렌더링 할 때) 나는이 현재 구현을 좋아하지 않는다 : 여기에 내가 손에 인스턴스화 된 객체가 예입니다. 나는 일반적으로 그렇게하려고 생각하고 있었지만 이것이 내가 원하는 것과 가능한지 확실하지 않다. 이걸로 나는 또한 3 가지 삭제 메소드 (그리고 추가와 같은 다른 것 중 3 개) - 각 타입, IUndead, IObject 및 ILiving에 하나 -이 필요합니다. 나는 이것이 그 일을하는 올바른 방법이 아니라고 생각합니다.
나는 요청에 따라 지금까지 시도한 것을 게시 하겠지만, 제네릭은 오히려 나쁘다. 나는 이것을 읽는 것이 낭비라고 느낀다.
마지막으로 성능이 매우 중요합니다. 내가 조기에 최적화하지는 않아, 이미 코드 작업을하고 있기 때문에 포스트 최적화를하고 있지만 더 빨리 진행할 필요가 있습니다. getlist 메소드는 매우 자주 호출 될 것이고 나는 명시적인 타입 검사를 피하고자한다.
실제로 사용되지 않는다면'GetList' 메소드의 매개 변수는 무엇입니까? 메서드가 아니라 속성으로 목록을 노출 할 수있는 것 같습니다. – Lee
그런데 어떻게했는지는 알지만,이 목록에 액세스하는 각 메소드의 3 가지 버전이 있어야합니다. 나는 3을 원하지 않으며, 나는 하나의 일반적인 버전을 원한다. 명시 적으로 목록을 속성으로 호출하여이 작업을 수행 할 수는 없습니다. 목록 자체는 일반적인 방법으로 검색해야합니다. 선택할 올바른 목록은 일부 유형 또는 다른 유형을 사용하여 결정해야합니다. – Denzil