Изучаю ооп c#

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Всем привет)
Можете подсказать что в данному коде делаю не верно?
код размещаю в Using
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;

namespace OzonCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        public class OzonStarter
        {
            public static string url {get;set;} = "https://www.ozon.ru/";
            public string cardUrl {get;set;}
            public string fio {get;set;}
            public string date {get;set;}
            public string starsCount {get;set;}
            public string cardText {get;set;}
            public string cardImage {get;set;}
            
            /// <summary>
            /// Открытие площадки, проверка прокси
            /// </summary>
            public void OzonOpen(ZennoLab.CommandCenter.Tab tab, Instance instance, ZennoLab.CommandCenter.HtmlElement he)
            {
                tab.Navigate(OzonStarter.url);
                if(tab.IsBusy){
                    tab.WaitDownloading();
                    System.Threading.Thread.Sleep(3000);
                }
            }
            
            /// <summary>
            /// Данный метод добавляет ссылку на товар в текстовый файл
            /// </summary>
            /// <param name="em">Объект для вставки</param>
            /// <returns>Результат вставки новых данных</returns>
            public bool Add(OzonStarter emp)
            {
                // Вставить новые данные в текстовый файл
                return true;
            }
            
        }
            
        public class IOzonReport
        {   
            /// <summary>
            /// Метод для создания отчета
            /// </summary>
            public virtual void GenerateReport(OzonStarter em)
            {
                // База, не модифицируется
            }
            
            /// <summary>
            /// Данный метод читает отчет
            /// </summary>
            public void readReport()
            {
                
            }           
        }
        
        public class OzonCSVReport : IOzonReport
        {
            public void GenerateReport(IOzonReport em)
            {
                // Отчет в формате CSV
            }
        }
        
        public class OzonTXTReport : IOzonReport
        {
            public void GenerateReport(IOzonReport em)
            {
                // Отчет в формате TXT
            }
        }
    }
}
Вызываю в кубике так:
OzonCode.CommonCode.OzonStarter.OzonOpen test = OzonCode.CommonCode.OzonStarter.OzonOpen();

У меня выдается ошибка, что OzonOpen отсутствует в пространстве имен OzonCode.CommonCode.OzonStarter
Что могу не так делать?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
C#:
var ozonStarter = new OzonStarter();
ozonStarter.OzonOpen(tab, instance, he);
 
  • Спасибо
Реакции: artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
C#:
var ozonStarter = new OzonStarter();
ozonStarter.OzonOpen(tab, instance, he);
где вы такой вызов делали? в кубике или в Using ? пробую делать в кубике у меня та же ошибка выдается.
Видимо, чтобы в кубике вызвать, надо как-то по-другому написать. Можете подсказать как?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
юзинги своего namespace в обеих вкладках общего кода прописали?
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
попробуйте
C#:
var ozonStarter = new CommonCode.OzonStarter();
ozonStarter.OzonOpen(tab, instance, he);
 
  • Спасибо
Реакции: artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
ну вот и славно :az:
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 228
Благодарностей
784
Баллы
113
ООП все таки лучше изучать в нормальной среде разработки и, на первых этапах, отдельно от zenno. Общий код в PM - это костыль на костыле. Потом сложно будет отучатся от дурных привычек. Сам через это проходил
 
  • Спасибо
Реакции: djaga

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
ООП все таки лучше изучать в нормальной среде разработки и, на первых этапах, отдельно от zenno. Общий код в PM - это костыль на костыле. Потом сложно будет отучатся от дурных привычек. Сам через это проходил
хм.. спасибо за совет. Попробую в студии тогда)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Попробую в студии тогда)
в студии намного удобнее работать и особенно отладку делать. а потом можно при желании и в зенку все перенести. в ПМ делать отладку неудобно и точки остановки часто глючат и выдают ошибки которых нет.
 
  • Спасибо
Реакции: djaga и artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
в студии намного удобнее работать и особенно отладку делать. а потом можно при желании и в зенку все перенести. в ПМ делать отладку неудобно и точки остановки часто глючат и выдают ошибки которых нет.
вроде все подправил. Сейчас такую ошибку выдает:
Тип Время Сообщение
16:29:09 Компиляция кода проекта Ошибка при компиляции общего кода "CS1106" "Extension method must be defined in a non-generic static class". [Строка: 38; Cтолбец: 18]
Что не так делаю? Можете по-русски расшифровать что это значит?
код:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;
using OzonCode;

namespace OzonCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        
    }

    public class OzonStarter
    {   
        public static string url {get;set;} = "https://www.ozon.ru/";
        public static string cardUrl {get;set;}
        public static string fio {get;set;}
        public static string date {get;set;}
        public static string starsCount {get;set;}
        public static string cardText {get;set;}
        public static string cardImage {get;set;}
        
        /// <summary>
        /// Открытие площадки, проверка прокси
        /// </summary>
        public void OzonOpen(this Tab tab, Instance instance, ZennoLab.CommandCenter.HtmlElement he)
        {
            tab.Navigate(OzonStarter.url);
            if(tab.IsBusy){
                tab.WaitDownloading();
                System.Threading.Thread.Sleep(3000);
            }
            
            
        }
        
        /// <summary>
        /// Данный метод добавляет ссылку на товар в текстовый файл
        /// </summary>
        /// <param name="em">Объект для вставки</param>
        /// <returns>Результат вставки новых данных</returns>
        public bool Add(OzonStarter emp)
        {
            // Вставить новые данные в текстовый файл
            return true;
        }
        
    }
        
    public class IOzonReport
    {   
        /// <summary>
        /// Метод для создания отчета
        /// </summary>
        public virtual void GenerateReport(OzonStarter em)
        {
            // База, не модифицируется
        }
        
        /// <summary>
        /// Данный метод читает отчет
        /// </summary>
        public void readReport()
        {
            
        }           
    }
    
    public class OzonCSVReport : IOzonReport
    {
        public void GenerateReport(IOzonReport em)
        {
            // Отчет в формате CSV
        }
    }
    
    public class OzonTXTReport : IOzonReport
    {
        public void GenerateReport(IOzonReport em)
        {
            // Отчет в формате TXT
        }
    }
}
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Что не так делаю? Можете по-русски расшифровать что это значит?
Скорее всего ругается на this, удали его. И переходи в студию для отладки ) там на русском ошибки выдает )
92267
 
  • Спасибо
Реакции: artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Скорее всего ругается на this, удали его. И переходи в студию для отладки ) там на русском ошибки выдает )
Посмотреть вложение 92267
как правильно вызвать список внутри метода?
пробую так:
C#:
public IZennoList proxyLst;
внутри класса
затем в методе пишу как обычно:
C#:
proxyLst = project.Lists["proxy"];
proxyLine = proxyLst[0];
выдается ошибка:
Тип Время Сообщение
16:23:08 Выполнение действия CSharp OwnCode: Main. [Общий код: Строка: 58; Cтолбец: 3] Ссылка на объект не указывает на экземпляр объекта.
Что может быть не так?
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Изменил чтение файла на методы c#
C#:
proxyPath = project.Directory + @"proxy.txt";
            using(FileStream fstream = File.OpenRead(proxyPath)){
                byte[] buffer = new byte[fstream.Length];               
                fstream.Read(buffer, 0, buffer.Length);
                proxyFromFile = Encoding.Default.GetString(buffer);
                project.SendInfoToLog("Получен прокси - " + proxyFromFile,true);
            }
Все равно та же ошибка, причем ругается именно на строчку с путем
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
причем ругается именно на строчку с путем
Ну значит проверить значение пути и наличие файла по этому пути, наличие строк в файле.. Добавь вывод инфы в лог, так понятнее будет на что может ругаться. какое значение пути используется и т.п.
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Ну значит проверить значение пути и наличие файла по этому пути, наличие строк в файле.. Добавь вывод инфы в лог, так понятнее будет на что может ругаться. какое значение пути используется и т.п.
Спасибо, проверю все пути
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)