그래서 VariableSeries라는 추상 클래스와이 클래스에서 파생 된 Indicator라는 추상 클래스, 그리고 그 추상 클래스를 구현하는 다양한 클래스 (지표라고 부름)가 있습니다. 나는 지표의 목록을 가지고 그것을 사용할 수 있기를 원한다.제네릭 클래스 목록 사용
public class VariableSeries<T>
{
protected List<T> Series;
public int CurrentBar { get; private set; }
public T this[int index]
{
get
{
if (index > CurrentBar)
throw new Exception("Tried to look too far in the past, data does not exist.");
return Series[CurrentBar - index];
}
}
...
}
그리고 VariableSeries에서 파생 된 것 지표 클래스있어 :
public abstract class Indicator<T> : VariableSeries<T>
{
...
}
가 지금은 다양한 유형의 지표의 목록을 갖고 싶어합니다. 내 첫 번째 아이디어는 목록을 선언하는 것이었지만 실제로는 작동하지 않습니다. 그리고 제네릭 형식을 사용하는 인덱싱을 사용해야하므로 인터페이스를 던지고 캐스트 할 수 없습니다. 주조 방식의
List<???> Indicators = new List<???>();
Indicators.Add(new MovingAverage<type is provided dynamically>());
do stuff with Indicators[0][0];
아마도 일종의 다음을 수행 할 수있는 방법이 있나요
public class MovingAverage<T> : Indicator<double>
{
...
}
:
그래서 나는 다음과 같은 표시 등 (중 하나)를 가지고 가정 해 봅시다 ((VariableSeries <>) 표시기 [0]) [0]과 같이 유형을 지정하지 않아도 일반 클래스로 변환 할 수 있습니까?
불가능합니다. 컴파일러는'indicators [0] [0]'식의 형식을 어떻게 알 수 있습니까? – Jon
내가 알기 때문에 알 필요가 없기를 바랬습니다. 예를 들어 표현식 표시기 [0] [0]과 동일한 유형이어야하는 DataTable의 열을 만들고이 값을 DataTable에 저장합니다. ... 내 옵션은 무엇입니까? –
어딘가에서 이미 알고있는 유형 정보가 소개되도록 구문을 변경하십시오. '((Indicator) 인디케이터 [0]) [0]'또는'public object this [int index]'로 작업하십시오. 후자는 복싱/언 박싱을 많이 유도하는 값 유형을 사용하기 때문에 여기에서 정말 좋지 않을 수 있습니다. –
Jon