«Объект» не содержит определения для - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь создать обработчик событий и получаю сообщение об ошибке: 'Object' does not contain a definition for ListCountLastH " и то же самое для listCountLH.

Изменение private List на public List не имеет значения, и я довольно конечно, я должен инициализировать списки в protected override void OnStateChange(), но в любом случае public /*override*/ void OnStateChange() не имеет значения, поэтому любая помощь будет принята с благодарностью.

public class Incrementer : DivergenceList5m выбрасывает ListCountLastH и listCountLH, недоступные из-за уровня защиты

DivergenceList5m.ListCountLastH.Add(DivergenceList5m.listCountLH); бросает дополнительно "An object reference is required for the non-static field, method or property'Namwspace.Class.ListCountLastH " и то же самое для listCountLH, и я просто не знаю, что еще попробовать ...

Спасибо

public class Divergence5min : Strategy
{
   public int listCountLH;
   private List<int> ListCountLastH;
   private List<double> LastHSwDMI;

   protected override void OnStateChange()
   {
      ListCountH            = new List<int>(); 
      LastHSwDMI            = new List<double>();
   }
   ...
   protected override void OnBarUpdate()
   {  
     if (!LHsDmiAdd && b > 1 && HSwDMI[b-1] - HSwDMI[b] > 0.001 && HSwDMI[b-1] - HSwDMI[b-2] > 0.001)
     {
       LastHSwDMI.Add(HSwDMI[b-1]);
       listCountLH = LastHSwDMI.Count;
       ListCountLastH.Add(listCountLH);
      ...
     }
   }
   public class Incrementer
   {
      public EventHandler ItemAdded;

      public void AddItem()
      {

        base.ListCountLastH.Add(base.listCountLH);
        if (ItemAdded != null)
            ItemAdded(this, null);
      }
   }
}

Такое изменение с помощью private List по-прежнему приводит к ошибке «недоступен из-за уровня защиты». Абонентский класс не выдает никаких ошибок, хотя

public class Incrementer : DivergenceList5m
{
    public event EventHandler ItemAdded;            
    public void AddItem()
    {
        var divList = new DivergenceList5m();
        divList.ListCountLastH.Add(divList.listCountLH);
        if (ItemAdded != null)
            ItemAdded(this, null);
    }
}

class AddingItems
{
    public int ItemsCount {get; private set;}

    public void Items (Incrementer incrementer)
    {
        ItemsCount = 0;
        incrementer.ItemAdded += AddItems;

    }
    void AddItems (object source, EventArgs e)
    {
        ItemsCount++;               
    }
}

Последняя версия кода

public class Divergence5min : Strategy
{
   public int listCountLH;
   public List<int> ListCountLastH;
   public List<double> LastHSwDMI;
...
public class Incrementer : DivergenceList5m
        {
            public event EventHandler ItemAdded;            

            public void AddItem()
            {
                var divList = new DivergenceList5m();
                divList.ListCountLastH.Add(divList.listCountLH);
                if (ItemAdded != null)
                    ItemAdded(this, null);
            }
        }

        class AddingItems
        {
            public int ItemsCount {get; private set;}

            public void Items (Incrementer inc)
            {
                ItemsCount = 0;
                inc.ItemAdded += AddItems;              
            }
            void AddItems (object source, EventArgs e)
            {
                ItemsCount++;               
            }
        }

1 Ответ

3 голосов
/ 19 января 2020
  1. Похоже, вы вызываете base.listCountLH в классе, который наследует от object (т.е. вы не унаследовали его от чего-либо - object является типом по умолчанию) , Вам нужно наследовать от Divergence5min следующим образом:

    public class Incrementer: Divergence5min 
    
  2. Чтобы теперь вызывать ListCountLastH отсюда, это свойство должно быть как минимум защищено чтобы получить доступ к нему из унаследованного класса:

    protected List<int> ListCountLastH;
    
  3. Чтобы получить доступ к non-stati c членам класса, необходимо сначала создать его экземпляр с помощью :

    var divList = new DivergenceList5m();
    divList.ListCountLastH.Add(divList.listCountLH);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...