非常に混乱している場合は、私のお詫び申し上げます。C#のジェネリックスを使用した相互依存インターフェイス
私はこの2つの主要なインターフェースを持っています。まずISensor
インタフェース:
public interface ISensor<TReading>
where TReading : ISensorReading<ISensor<TReading>>
{
event SensorReadingCompletedEH<ISensor<TReading>, TReading> ReadCompleted;
TReading Read();
}
そして、第2のインタフェース:ISensorReading
:
public interface ISensorReading<TSensor>
where TSensor : ISensor<ISensorReading<TSensor>>
{
TSensor Sensor { get; }
}
それは以下のエラーにつながる:>を踏む
タイプISENSOR <は
に変換可能でなければなりませんISensor < ISensorReading < ISensor < TReadingジェネリック型のパラメータTSensorとしてそれを使用するため、または方法において> > ISensorReading <TSensor>
と
タイプISensorReading <TSensor>は
ISensorReading < ISENSOR < ISensorReading < TSensorに変換可能でなければなりません> > >をパラメータとして使用する一般的なタイプまたはメソッドで使用するISensor <TReading>
コンパイル時に不明瞭な循環参照が原因であることが心配です。しかし私はTelemetricSensorのような派生型のための合同を確保したい:ISensor<TelemetricReading>
と TelemetricReading:私は、単純なキャストと型安全を許可するために使用する他のaproaches
ISensorReading<TelemetricSensor>
?
私はあなたが、それは無限の入れ子につながるので、あなたは、ジェネリック型の制約をこのように使用してそれらを定義することはできません右です.NET 2.0とVS2005
実際には、共分散および反動が頭痛の原因となります。 残念ながら、私のアプリケーションはMONOとできるだけ互換性があり、C#4.0へのアップグレードはオプションではありません。また、.NET 4.0は.NET 2.0ほど効率的ではないことに気付きました – Kyordhel
.net 4.0は2.0より効率が悪いですか?どのように、正確に? –