Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





C# Observable

Iniciado por blau, 03 de Octubre de 2011, 01:25:17 PM

« anterior - próximo »

blau

He probado a implementar un observable de esta manera, pero no me vale cuando se pasa por referencia,

he estado investigando, y he visto la libreria reactions, pero aparte de que no encuentro la referencia para poder probarla, tiene una manera un poco rara de trabajar. ¿Alguien tiene algúna idea aparte de hacerlo todo en plan manual?

  public struct Subject<T> where T : struct
    {
        T _value;

        public event Action<T> ValueChanged;

        public T Value
        {
            get
            {
                return _value;
            }
            set
            {
                _value = value;
                OnValueChanged();
            }
        }

        private void OnValueChanged()
        {
            if (ValueChanged != null) ValueChanged(_value);
        }

        public static implicit operator T(Subject<T> m)
        {
            return m._value;
        }

        public static implicit operator Subject<T>(T m)
        {
            return new Subject<T>() { Value = m };
        }
    }

    public class SequenceData : Engine.Core.Data
    {
        public Subject<float> Duration;
   
        protected override void OnSave(System.Xml.XmlWriter writer)
        {
            writer.WriteElementString("Duration", Duration);
        }

        protected override void OnLoad(XmlTokenCollection reader)
        {
            reader.ReadElementString<float>("Duration", out Duration);
        }
    }

Vicente

En el Framework 4.0 tienes dos interfaces para esto:

IObservable: http://msdn.microsoft.com/en-us/library/dd990377.aspx
IObserver: http://msdn.microsoft.com/en-us/library/dd783449.aspx

Que son basicamente lo mas basico de Rx (Reactive Extensions). Lo que pasa es que el equipo de Rx no quiere estar dentro del Framework porque eso les obliga a solo poder hacer releases cuando las hace el Framework (y ellos no quieren estar atados a esa limitacion).

Sobre Rx, es cierto que son un poco raras, pero por lo que he leido que la libreria es la caña (la tengo en tareas pendientes para aprender).







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.