Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: blau en 03 de Octubre de 2011, 01:25:17 PM

Título: C# Observable
Publicado por: blau en 03 de Octubre de 2011, 01:25:17 PM
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);
        }
    }
Título: Re: C# Observable
Publicado por: Vicente en 03 de Octubre de 2011, 01:47:20 PM
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).
Título: Re: C# Observable
Publicado por: Vicente en 03 de Octubre de 2011, 01:49:19 PM
Y un super post en Stack Overflow que lo mismo te da ideas:

http://stackoverflow.com/questions/7549688/implementing-observers-and-subjects-using-iobserver-iobservable