C #: как я могу получить значение нового атрибута из атрибута базового класса? - PullRequest
0 голосов
/ 20 марта 2019

Я хотел бы добавить атрибут к объекту treenode.

Я хочу, чтобы новое значение атрибута (т. Е. Ключ) было получено из Treenode.Fullpath.

Как я могу его реализовать?

class ItemNode:TreeNode
{
    internal string key  { get; set; } = base.FullPath.split("\\")[1]; //Error
} 

1 Ответ

2 голосов
/ 20 марта 2019

Это значение не может быть вычислено в момент инициализации поля.Это слишком рано.Объект все еще создается, и компилятор не может быть уверен, что базовая часть находится в допустимом состоянии, поэтому доступ к его данным не разрешен.

Я бы порекомендовал вам реализовать свойство самостоятельно, чтобы выможет контролировать, когда логика выполняется.Тогда вы можете загрузить его, когда захотите.Например, простая отложенная загрузка может работать так:

class ItemNode:TreeNode
{
    internal private string _key = null;

    internal public string Key
    {
        get
        {
            if (_key == null) _key = base.FullPath.split("\\")[1];
            return _key;
        }
        set 
        {
            _key = value;
        }
     }
}
...