Автосвойства C# 3.0 - действительно ли возможно добавить пользовательское поведение?

  • отступ одного уровня
  • одиночный набор скобок
  • максимальная совместимость с браузером
  • hasOwnProperty safe

var p = {"p1": "value1", "p2": "value2", "p3": "value3"};

for (var key in p) if (p.hasOwnProperty(key)) {
  var value = p[key];
  console.log(key, value);
}

6
задан Patrick D'Souza 29 April 2013 в 06:33
поделиться

6 ответов

Нет, необходимо будет использовать "традиционные" определения свойства для пользовательского поведения.

17
ответ дан 8 December 2019 в 04:11
поделиться

Нет Вы не можете: автоматическое свойство является ярлыком для явного средства доступа к частному полю. например.

public string Name { get; set;} 

ярлык на

private string _name;
public string Name { get { return _name; } set { _name = value; } };

Если Вы хотите поместить пользовательскую логику, необходимо записать, получают и устанавливают явно.

4
ответ дан 8 December 2019 в 04:11
поделиться

Обратитесь к PostSharp. Это - платформа AOP для обычно проблемы "этот шаблон кода, я делаю сотню времени день, как я могу автоматизировать его?". Можно упростить с PostSharp это (например):

public Class1 DoSomething( Class2 first, string text, decimal number ) {
    if ( null == first ) { throw new ArgumentNullException( "first" ); }
    if ( string.IsNullOrEmpty( text ) ) { throw new ArgumentException( "Must be not null and longer than 0.", "text" ) ; }
    if ( number < 15.7m || number > 76.57m ) { throw new OutOfRangeArgumentException( "Minimum is 15.7 and maximum 76.57.", "number"); }

    return new Class1( first.GetSomething( text ), number + text.Lenght );
}

кому:

    public Class1 DoSomething( [NotNull]Class2 first, [NotNullOrEmpty]string text, [InRange( 15.7, 76.57 )]decimal number ) {
        return new Class1( first.GetSomething( text ), number + text.Lenght );
}

Но это не все!:)

2
ответ дан 8 December 2019 в 04:11
поделиться

Вы могли рассмотреть использование PostSharp для записи перехватчиков методов set. Это - и LGPL и GPLed, в зависимости от которых частей библиотеки Вы используете.

1
ответ дан 8 December 2019 в 04:11
поделиться

Если это будет поведение, то Вы повторитесь много во время разработки, можно создать отрывок пользовательского кода для специального типа свойства.

1
ответ дан 8 December 2019 в 04:11
поделиться

Самое близкое решение, о котором я могу думать, использует вспомогательный метод:

public void SetProperty<T>(string propertyName, ref T field, T value)
 { field = value;
   NotifyPropertyChanged(propertyName);
 }

public Foo MyProperty 
 { get { return _myProperty}
   set { SetProperty("MyProperty",ref _myProperty, value);}
 } Foo _myProperty;
1
ответ дан 8 December 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: