powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вынос части кода в другой класс в C#
25 сообщений из 41, страница 1 из 2
Вынос части кода в другой класс в C#
    #39877447
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Помогите чайнику. Есть такой класс: XeroExport.cs. В нем очень много кода. Он выглядит примерно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
namespace Export
{
    public class XeroExport: ApiWrapper
    {
        public void ExcelExport()
        {
            DateTime startDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodStart"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            DateTime endDate = DateTime.ParseExact(ConfigurationManager.AppSettings["PeriodEnd"], "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
            Call_BalanceSheet(startDate, endDate);
        }
        private List<InvoiceTableRow> converZInvouice(Invoice invoice)
        {
        }
        private String convertInvoiceToString(Invoice invoice)
        {
        }
        private void saveInvoices(string filename, List<Invoice> invoices)
        {
        }
        private void GetInvoices()
        {
        }
        private int GetTotalInvoiceCount()
        {
        }
        private int GetTotalContactCount()
        {
        }
        private int GetTotalJournalCount()
        {
        }
        public int CheckReportStatus(string ReportName)
        {
            ...  
            return ReportStatus;
        }
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
                 ...
                 Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
                 ...
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
            ...   
            var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }
}



Я хочу методы Call_BalanceSheet и Insert_BalanceSheet вынести в отдельный класс: BalanceSheet.cs:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using Xero.Api.Example.MVC.Helpers;

namespace Export
{

    public class BalanceSheet
    {
        private void Call_BalanceSheet(DateTime periodStart, DateTime periodEnd)
        {
            int reportStatus = CheckReportStatus("Balance Sheet");
            if (reportStatus == 1)
            {
               ... 
               Insert_BalanceSheet(monthStartDate, monthEndDate, reportDate);
            }
        }
        private void Insert_BalanceSheet(DateTime periodStart, DateTime periodEnd, DateTime runDate)
        {
             ....
             var pal = Api.Reports.BalanceSheet(periodStart, null, null, false, null, null, null);
        }
    }

}



После того как я это делаю, XeroExport.cs не находит Call_BalanceSheet, BalanceSheet.cs не находит CheckReportStatus и Api.

Как сделать так, чтобы они видели методы друг друга?

Не ругайте сильно, опыта программирования у меня не много.

Спасибо.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877476
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, не найдет. Они же у тебя как private объявлены.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877484
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если зашла речь о такой декомпозиции, то тебе лучше сразу изучить про "Dependency Injection" и делать все это по SOLID. Могу посоветовать вот такую книгу: Марк Симан: Внедрение зависимостей в .NET
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877490
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже немного разобрался как достучаться до Call_BalanceSheet и CheckReportStatus:
В ExcelExport создать переменную:
Код: c#
1.
2.
3.
            
var balancesheet = new BalanceSheet();
balancesheet.Call_BalanceSheet(startDate, endDate);



И также в BalanceSheet:
Код: c#
1.
2.
var checkReportStatus = new XeroExport();        
int reportStatus = checkReportStatus.CheckReportStatus("Balance Sheet");



А вот с Api никак.

Скопировал в BalanceSheet.cs все "using" из XeroExport.cs:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Collections.Generic;
using Xero.Api.Core.Model;
using Xero.Api.Core;
using Xero.Api.Payroll.Australia.Model;
using System.Linq;



Все равно не работает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877499
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКонечно, не найдет. Они же у тебя как private объявлены.

Это я исправил.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877510
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877518
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mА вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877558
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoust_mА вот с Api не могу разобраться. Она в другом проекте. Почему-то XeroExport.cs ее видит, а вот BalanceSheet.cs - нет.
Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.

Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877562
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А solution - один на всех
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877564
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mfkthatпропущено...

Наверное проект не добавлен в "References". В Solution Explorer правый клик по "Dependencies", потом "Add reference -> Solution" и поставить галку на нужный проект.

Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877566
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mНо ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.
Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
C using-ами все ок?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877567
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать partial class, раз уж размер исходника так смущает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877571
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneRoust_mпропущено...


Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper



А где его показать? В BalanceSheet.cs?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877574
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoust_mНо ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.
Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?
C using-ами все ок?

Да, юзинги одинаковые у обоих классов.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877577
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneRoust_mпропущено...


Но ведь это на уровне проекта? XeroExport.cs и BalanceSheet.cs - в одном проекте и даже в одном namespace. Api - в другом проекте.

Почему XeroExport.cs видит Api, а BalanceSheet.cs - не видит?

потому что (покажите этот класс):
Код: c#
1.
public class XeroExport: ApiWrapper



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   public class ApiWrapper
    {
        public ApiWrapper()
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
        }

        private IXeroCoreApi _api;
        protected IXeroCoreApi Api
        {
            get { return _api ?? (_api = CreateCoreApi()); }
        }

        private static IXeroCoreApi CreateCoreApi()
        {
            return new Xero.Api.Example.Applications.Private.Core
            {
                UserAgent = "Xero Api - Integration tests"
            };
        }

    }
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877579
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.
Ага. При желании, можно вообще все приложение сделать как один большой partial класс. А при большом желании можно и хер сломать, хоть он и без костей. Как будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877580
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.

Это интересная идея, почитаю на эту тему. А то я замучался связывать эти классы. А кода действительно много, пока долистаешь до нужного класса...
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877582
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatСон Веры ПавловныМожно сделать partial class, раз уж размер исходника так смущает.
Ага. При желании, можно вообще все приложение сделать как один большой partial класс. А при большом желании можно и хер сломать, хоть он и без костей. Как будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.

Мне такие высоты рано пока. Мне просто для удобства. Слишком много исходника на одном файле.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877598
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mЭто интересная идея, почитаю на эту тему. А то я замучался связывать эти классы. А кода действительно много, пока долистаешь до нужного класса...
Паршиал классы придумали для вполне определенной цели - разнести по разным файлам сгенеренную каким-либо генератором часть класса и ту часть класса, которая пишется руками. Использовать их для чего-то другого нафиг не следует. Если твой класс большой, то его просто надо разбивать на несколько. Листать по классам, в чем проблема-то - "F12" ("Go to definition") и попадаешь сразу в нужное тебе место. Можно и в обратную сторону - "Find all references" - и сразу видишь что и где какой-либо твой код вызывает.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877633
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКак будто приложение по классам разбивают только чтобы отдельные файлы исходников поменьше были.
Ну, исходя из стартового постинга, ТС хочет разбить на классы именно по этой причине.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877705
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Спасибо, очень хорошо получилось, гораздо легче работать стало.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877815
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К слову, в части реализации винформсового DataGridView (причем не похоже, что это автосгенеренный код) 29999 строк. И ничего, писали как-то люди, работали с этим.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877934
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatПаршиал классы придумали для вполне определенной цели - разнести по разным файлам сгенеренную каким-либо генератором часть класса и ту часть класса, которая пишется руками. Использовать их для чего-то другого нафиг не следует. Если твой класс большой, то его просто надо разбивать на несколько.
То же самое когда-то говорилось и о регионах (regions). Хотите сказать, не используете их?
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877939
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRТо же самое когда-то говорилось и о регионах (regions). Хотите сказать, не используете их?
Нет. А зачем? Если класс большой, то наверняка он нарушает принцип "Single responsibility" и его надо просто разбивать на меньшие. А регионы - это просто разновидность комментариев, с тем отличием, что их сворачивать можно в IDE. Функциональной роли они никакой не играют.
...
Рейтинг: 0 / 0
Вынос части кода в другой класс в C#
    #39877954
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatНет. А зачем? Если класс большой, то наверняка он нарушает принцип "Single responsibility" и его надо просто разбивать на меньшие. А регионы - это просто разновидность комментариев, с тем отличием, что их сворачивать можно в IDE. Функциональной роли они никакой не играют.
Т.е., для каждого класса свой файл-исходник? И если классов в проекте очень много - много и файлов. Но кому-то проще структурировать с помощью регионов в нескольких файлах. Партиал классы тоже можна использовать для структурирования (по интерфейсам/контрактам или по кодерам). Еще их иногда удобно использовать в сочетании с "Add As Link" (для нескольких проектов), это дает возможность избавится от необходимости создания отдельной сборки с базовым классом.
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вынос части кода в другой класс в C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]