Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32

Передача членов базового класса классу наследнику

30.11.2018, 17:21. Показов 3135. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть класс базовый класс TSP, в поле textFileContent которого передаю содержание файла .txt:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class TSP : Form
    {
    private List<string> textFileContent;    
    private void openToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.Cancel)
            return;
            string filename = openFileDialog1.FileName;
            textFileContent = File.ReadAllLines(filename).ToList();//Тут есть содержимое
    }
    public List<string> FileContent
    {
        get { return fileContent; }
    }
Есть класс - наследник ReadWriteCoordinates, в который пытаюсь передать содержимое поля textFileContent для последующей работы с ним:
C#
1
2
3
4
5
6
class ReadWriteCoordinates : TSP
    {
        public List<List<double>> GetToArr()
        {
            TSP Data = new TSP();
            List<string> textFileContent = Data.FileContent;//Тут пусто, null
Я считал, что могу обратиться к полю с помощью его общедоступного свойства, но что - то пошло не так.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2018, 17:21
Ответы с готовыми решениями:

Приведение базового класса к наследнику
Допустим, есть такие классы class First { public string fieldFirst; } class Second:First { public string fieldSecond; }Из...

Добавить новый интерфейс классу-наследнику
У меня есть using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...

В приведенном коде base может изменить значения членов базового класса в самом базовом классе
using System; class a { public int x; public a() { x = 122; } } class b : a {public b() {base.x =...

14
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.11.2018, 18:26
Возможно нужно:
C#
13
get { return textFileContent; }
0
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32
30.11.2018, 19:51  [ТС]
Даценд, к сожалению все тот же ArgumentNullException.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.11.2018, 20:14
Цитата Сообщение от Kurupt Посмотреть сообщение
Я считал, что могу обратиться к полю с помощью его общедоступного свойства, но что - то пошло не так.
Да, это так. Но у Вас поле textFileContent не общедоступно. Поменяйте его модификатор доступности на public, internal или protected.

Добавлено через 2 минуты
Так же у Вас ошибка и при обращении к нему в наследнике. Вы не записываете в него. А объявляете новое поле с видимостью ограниченной методом.
Для записи надо просто указать имя без объявления типа.
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.11.2018, 21:11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поменяйте его модификатор доступности на public, internal или protected
Не нужно. Через открытый метод/свойство доступ к закрытому полю будет.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для записи надо просто указать имя без объявления типа.
Не поможет.

Дело в том, что строкой
C#
1
TSP Data = new TSP();
создается новый экземпляр класса TSP, к тому, в котором
Цитата Сообщение от Kurupt Посмотреть сообщение
есть содержимое
отношения не имеющий.

Kurupt,
Мне кажется, у вас что-то не так с архитектурой приложения. Зачем класс наследуется от формы и затем в методе создается еще один экземпляр базового класса?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.11.2018, 21:19
Цитата Сообщение от Даценд Посмотреть сообщение
Не нужно. Через открытый метод/свойство доступ к закрытому полю будет.
ТС пишет о прямом доступе к полю. Без использования методов.
Цитата Сообщение от Даценд Посмотреть сообщение
Дело в том, что строкой
C#Выделить код
C#
1
TSP Data = new TSP();
создается новый экземпляр класса TSP, к тому, в котором
Да, но ТС пишет не о свойстве FileContent и поле fileContent объекта Data, а о поле textFileContent класса ReadWriteCoordinates, но недоступному из-за модификатора доступа.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.11.2018, 21:30
Цитата Сообщение от Элд Хасп Посмотреть сообщение
о поле textFileContent класса ReadWriteCoordinates, но недоступному из-за модификатора доступа
Не-не-не. Наоборот. Там же так:
Цитата Сообщение от Kurupt Посмотреть сообщение
Есть класс - наследник ReadWriteCoordinates, в который пытаюсь передать содержимое поля textFileContent
Добавлено через 1 минуту
Или я неправильно понял и это следует читать как
Есть некий класс - наследник класса ReadWriteCoordinates, в который пытаюсь передать содержимое поля textFileContent...
???

Добавлено через 56 секунд
Но тогда при чем здесь
Цитата Сообщение от Kurupt Посмотреть сообщение
//Тут есть содержимое
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.11.2018, 21:30
Цитата Сообщение от Даценд Посмотреть сообщение
Или я неправильно понял и это следует читать как
Есть некий класс - наследник класса ReadWriteCoordinates, в который пытаюсь передать содержимое поля textFileContent...
???
Да, там TC непонятно выражается, но по коду становится понятно, что он хотел сказать.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.11.2018, 21:32
Цитата Сообщение от Элд Хасп Посмотреть сообщение
по коду становится понятно, что он хотел сказать
Ни разу не становится.

Kurupt, все-таки, что от чего наследуется и что куда передается?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.11.2018, 21:33
Цитата Сообщение от Даценд Посмотреть сообщение
Но тогда при чем здесь
Не знаю. Не ясно и путано выражает свои мысли..., наверное.
0
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32
30.11.2018, 21:46  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Или я неправильно понял и это следует читать как
Нет, Вы все правильно поняли. Я пытался передать в производный класс ReadWriteCoordinates содержимое private поля используя открытое свойство.
Цитата Сообщение от Даценд Посмотреть сообщение
Зачем класс наследуется от формы
Вы имеете ввиду зачем класс TSP наследует форму? Если да, то мне почему то казалось, что это наследование позволяет работать с элементами формы (кнопки, списки, текстовые поля и т.п.)
По задумке класс ReadWriteCoordinates наследует класс TSP, чтобы разделить функциональность классов, то есть в классе TSP происходит чтение и запись текстового файла, и выполняется событие нажатия некой кнопки на форме. В классе ReadWriteCoordinates по задумке происходит обработка полученного текстового файла (извлекается необходимая информация). Сейчас это все выполняется в одном классе, но хотелось бы распределить действия.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
30.11.2018, 21:52
Цитата Сообщение от Kurupt Посмотреть сообщение
ReadWriteCoordinates наследует класс TSP, чтобы разделить функциональность классов
Разделение функциональности классов быть должно. Но в данном случае только такое: Класс ReadWriteCoordinates читает координаты, делает списки, сортирует, т.е. всячески обрабатывает данные. Класс формы отображает данные в контролах и дает команды методам класса. И наследование при этом совершенно ни к чему.
1
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
30.11.2018, 21:57
Цитата Сообщение от Kurupt Посмотреть сообщение
Вы имеете ввиду зачем класс TSP наследует форму? Если да, то мне почему то казалось, что это наследование позволяет работать с элементами формы (кнопки, списки, текстовые поля и т.п.)
По задумке класс ReadWriteCoordinates наследует класс TSP, чтобы разделить функциональность классов, то есть в классе TSP происходит чтение и запись текстового файла, и выполняется событие нажатия некой кнопки на форме. В классе ReadWriteCoordinates по задумке происходит обработка полученного текстового файла (извлекается необходимая информация). Сейчас это все выполняется в одном классе, но хотелось бы распределить действия.
Если речь идет о Single Responsibility принципе - то суть в разделении ответственности объектов, а не классов.
Вообще, наследование нынче - плохая практика с точки зрения дизайна. Используйте агрегацию/композицию (как завещали ребята из GoF).
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.11.2018, 22:01
Цитата Сообщение от Kurupt Посмотреть сообщение
Вы имеете ввиду зачем класс TSP наследует форму? Если да, то мне почему то казалось, что это наследование позволяет работать с элементами формы (кнопки, списки, текстовые поля и т.п.)
По задумке класс ReadWriteCoordinates наследует класс TSP, чтобы разделить функциональность классов, то есть в классе TSP происходит чтение и запись текстового файла, и выполняется событие нажатия некой кнопки на форме. В классе ReadWriteCoordinates по задумке происходит обработка полученного текстового файла (извлекается необходимая информация). Сейчас это все выполняется в одном классе, но хотелось бы распределить действия.
Наследование от формы возможно, но с формой наследуются и все визуальные элементы.
Если у Вас есть несколько форм с большим количеством одинаковых элементов, то можно сделать базовую куда вынести эти одинаковые элементы. И потом от неё наследовать и добавлять в наследники дополнительные элементы. Но обычно подобное делается через UserControl.
В Вашем случая, как я понял, конечная форма будет одна. И смысла в таком нет.
1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32
30.11.2018, 23:08  [ТС]
Ребята, всем огромное спасибо, для меня каждое ваше сообщение - пища для размышлений!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2018, 23:08
Помогаю со студенческими работами здесь

Применение стиля к наследнику базового класса
Привет! Есть базовый класс QTabWidget. Определяю свой собственный класс TabWidget, который является наследником QTabWidget. ...

Как получить данные классу наследнику из класса предка
Здраво ребята!!! Подскажите пожалуйста как мне из класса потомка получить данные из класса предка? Как получить данные из переменной...

В наследнике не видно членов базового класса
в чем ошибка кто подскажет? )).... val не видит #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; class Base { ...

Запретить наследование некоторых членов базового класса
можно ли запретить унаследование некоторых членов базового(любого) класса?

Не могу вернуть подключение классу наследнику php ооп
День добрый.. не могу вернуть подключение классу наследнику.. для дальнейшей работы базы данных.. Раньше программировал процедурной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru