C # переопределить свойство с дочерними / родительскими отношениями - PullRequest
0 голосов
/ 05 ноября 2018

Итак, в основном я хочу иметь возможность использовать пространство имен одного свойства, которое может быть переопределено дочерним элементом родительского объекта этого свойства. Практическое применение здесь - поддержка системы Модель / Представление. Там, где представления получены из одного и того же базового класса представлений, однако для некоторых требуется более сложная модель для выполнения их функций.

Мне было интересно, существует ли для этого наилучшая модель, поскольку мой нынешний подход к простому скрытию переменных имен пространств кажется слишком грязным. Вот пример псевдокода того, что я имею в виду:

public class ParentPropertyType{

public string bar = "bar";

}

public class ChildPropertyType: ParentPropertyType{

public string foo = "foo";

}


public class ChildManager:ParentManager {

public virtual ChildPropertyType PropertyType {get; set;}

}

public class ParentManager{

public override ParentPropertyType PropertyType {get; set;}

}

...

Debug.Log(new ParentManager().PropertyType.foo);

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Похоже, вы должны сделать свой класс ParentManager родовым:

public class ChildManager : ParentManager<ChildPropertyType>
{
}

public class ParentManager<T> where T: ParentPropertyType 
{
    public T PropertyType { get; set; }   
}

Теперь вам даже не нужны virtual и override, поскольку свойство имеет правильный тип в зависимости от класса, в котором оно используется. Для этого прекрасно скомпилируется следующее, поскольку PropertyType возвращает экземпляр ChildPropertyType:

var manager = new ChildManager();
ChildPropertyType c = manager.PropertyType;
0 голосов
/ 05 ноября 2018

В C # нет способа переопределить метод и изменить его тип возвращаемого значения на тип-потомок. "Грустно, но верно".

На вашем месте я бы повторно ввел (используя "new") метод / свойство, чтобы вернуть желаемый тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...