Тип, из которого вы вызываете метод Register, не является фактическим владельцем свойства, поэтому вы не можете указать тип, отличный от фактического владельца, поскольку указанный вами тип равен фактическим владельцем .
Пример, в котором это может быть полезно, - это когда вы создаете пользовательский элемент управления, содержащий другие элементы управления. Ранее с WinForms, если у вас была какая-то дополнительная информация, которая была бы полезна только для этого контейнера, но семантически принадлежала дочернему элементу, то лучшее, что вы могли сделать, - это поместить эту информацию в свойство «все теги». Это и удалило безопасность типов, и вы никогда не были уверены, что другой класс не попытается сохранить что-то еще в теге. Теперь свойства зависимостей WPF позволяют привязывать значения к объектам, при этом сам объект не должен содержать значение. Тривиальный пример:
public class ButtonContainer : Control
{
public Button ChildButton { get; set; }
public static readonly DependencyProperty FirstOwnerProperty =
DependencyProperty.Register("FirstOwner", typeof(ButtonContainer),
typeof(Button));
public ButtonContainer()
{
ChildButton = new Button();
ChildButton.SetValue(FirstOwnerProperty, this);
}
}
Теперь у кнопки есть дополнительное свойство, которое имеет смысл только в контексте ButtonContainer, и доступ к нему можно получить только в контексте ButtonContainer - например, типизированный безопасный инкапсулированный тег.
Используя новый класс следующим образом:
ButtonContainer container1 = new ButtonContainer();
ButtonContainer container2 = new ButtonContainer();
container2.ChildButton = container1.ChildButton;
Когда ChildButton перемещается из одного контейнера в другой, значение его FirstOwnerProperty перемещается вместе с ним, как если бы он был реальным членом класса Button. Контейнер2 может вызвать ChildButton.GetValue (FirstOwnerProperty) и выяснить, какой ButtonContainer изначально создал кнопку (почему он может захотеть это сделать, оставлено в качестве упражнения для читателя ...). Все это возможно без необходимости подкласса кнопки для узкой специальности.