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