Току-що започнах да играя с DependencyProperties в WPF и исках да проверя няколко мисли, докато се справя с тях.
Като се има предвид следното (и игнориране на конвенцията за именуване за сега):
class MyTestClass
{
public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));
public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}
Намирам, че dp2 хвърля TypeInitializationException със съобщението "Типът 'MyTestClass' трябва да произлиза от DependencyObject", което очаквах, но dp1 се приема доста щастливо.
Сега разбирам защо dp2 повдига изключение, тъй като се опитвам да регистрирам метаданни за свойства на тип, който не е DependencyObject и това е добре. Погледнах под завивките и мога да видя пътя на кода, който dp1 и dp2 следват, така че разбирам от гледна точка на кода защо dp1 не повдига изключението, но концептуално бих очаквал и dp1, и dp2 да предизвикат едно и също изключение.
Въпросът ми е каква е ползата от създаването на DependencyProperty като dp1, чийто ownerType не е DependencyObject, тъй като не виждам как може да се използва без методите GetValue/SetValue на DependencyObject.