regular interface:
public interface icomputation { void reset(); float getvalue1(); float getvalue2(); }
generic interface:
public interface icomputation<t> : icomputation t : icomputation { t proxy { get; set; } }
now classes:
public abstract class computation<t> : icomputation<t> t : icomputation { public t proxy { get; set; } }
class 'computationcache' 'decorated" computation:
internal abstract class computationcache<t> : icomputation t : icomputation { public t proxy { get; set; } public float getvalue1() { bool iscached = //check cache. if(!iscached) { //compute value float value1 = proxy.getvalue1(); //update cache return value; } } }
to initialize decorated computation, tried following:
public computationcache(icomputation<t> proxy) { proxy = (t) proxy; proxy.proxy = this; }
...which gives following error":
cannot convert source type 'computationcache' target type 't'.
can comment on whether better use:
computationcache<t> : icomputation t : icomputation
vs
computationcache<t> : icomputation<t> t : icomputation
first, should use:
computationcache<t> : icomputation<t> t : icomputation
if want use cache icomputation<t>
, have access proxy
property.
second, error:
cannot convert source type 'computationcache' target type 't'.
just this:
proxy.proxy = (t)(icomputation)this;
(i don't know why there error. since computationcache icomputation, t...)
edit: found makes solution wrong:
new computationcache<computation<icomputation>>(new computation<computation<icomputation>>());
this post helped find error generics variance
t
becomes computation<icomputation>
isn't equal computationcache
type.
you have troubles make working proxy
property wrote it.
you may want then:
public interface icomputation { icomputation proxy { get; set; } // other stuff } public interface icomputation<t> : icomputation t : icomputation { new t proxy { get; set; } // other stuff }
but have manage 2 properties proxy
.
i don't know trying achieve, it's start.
Comments
Post a Comment