Расширение унаследованных свойств c # - PullRequest
0 голосов
/ 28 августа 2018

У меня есть класс, который наследуется от базового класса

Есть еще два класса, у которых есть списки этих исходных классов в качестве свойств

Я думаю, что два новых класса должны иметь наследование, но не может заставить их работать.

public class Attribute
{
    public string Name { get; set; }
    public string ShortName { get; set; }
    public bool Standard { get; set; }
}

public class BaseAttribute : Attribute
{
    public int Value { get; set; }
}

public class Profile
{
    public List<Attribute> AttributeList = new List<Attribute>
    {
        new Attribute {Name = "Hands", ShortName = "HA", Standard = true},
        new Attribute {Name = "Arms", ShortName = "AR", Standard = true},
    };
}

public class BaseProfile: Profile
{
    public List<BaseAttribute> AttributeList
    { get; set; }
}

Могу ли я изменить тип унаследованного AttributeList, чтобы расширить его и включить свойство value в каждый элемент? Или я вообще не должен наследовать в терминах BaseProfile?

Я пробовал искать здесь (и в более широких интервалах), и есть ряд ответов, которые помогают простому наследованию, но я не смог найти тот, где тип свойства изменяется во время наследования.

1 Ответ

0 голосов
/ 28 августа 2018

Атрибут является недопустимым именем для класса, выберите другое имя для него. (Это стандартный класс .Net, и его лучше избегать даже в конце имени класса, поскольку завершение атрибута подразумевает, что этот класс наследуется от атрибута).

    public class Attribute
    {
        public string Name { get; set; }
        public string ShortName { get; set; }
        public bool Standard { get; set; }
    }

    public class BaseAttribute : Attribute
    {
        public int Value { get; set; }
    }

    public class Profile<T> where T:Attribute,new ()
    {
        public List<T> AttributeList = new List<T>
        {
             new T {Name = "Hands", ShortName = "HA", Standard = true},
             new T {Name = "Arms", ShortName = "AR", Standard = true},
        };
    }

    public class BaseProfile : Profile<BaseAttribute>
    {

    }
...