DependencyProperty
От: Visor2004  
Дата: 15.12.10 18:52
Оценка:
Господа, прошу высказаться по поводу того, что лично вам не нравится в реализации DependencyProperty. Есть мнение, что в рамках функциональности DependencyProperty реализовать аналог лучше, чем реализован в Ms, практически нереально. Если бы вы делали DependencyProperty, как бы вы их делали?

Мой вариант в виде C# псевдокода, описывающий основную идею, как видно максимум чего я добился пока — это типизация и отказ от упаковки/распаковки:

  class Element
  {
    static Property<double> widthProperty;

    static Element ( )
    {
      widthProperty = Property ( _ => _.Width, ( ) => new Element ( ), double.NaN, ( s, v ) => s.OnWidthChanged ( v ) );
    }

    [Options ( Options.Measure | Options.Render | Options.Arrange )]
    public double Width
    {
      get { return GetValue ( widthProperty ); }
      set { SetValue ( widthProperty, value ); }
    }

    protected T GetValue<T> ( Property<T> property )
    {
      return default ( T );
    }

    protected void SetValue<T> ( Property<T> property, T value )
    { 
    
    }

    private void OnWidthChanged ( double newWidth )
    {

    }

    private static Property<T> Property<O, T> ( Expression<Func<O, T>> property, Expression<Func<O>> ownerType,
      T defaultValue, Action<O, T> changed )
    {
      return null;
    }
  }

  class Property<T> { }

  [Flags]
  enum Options
  {
    Render,
    Measure,
    Arrange
  }

  [AttributeUsage ( AttributeTargets.Property )]
  class OptionsAttribute : Attribute
  {
    public OptionsAttribute ( Options options ) { this.Options = options; }

    public Options Options { get; private set; }
  }
Помните!!! ваш говнокод кому-то предстоит разгребать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.