powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# помогите с ООП
18 сообщений из 18, страница 1 из 1
C# помогите с ООП
    #38026078
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class Matrix
{
    double[,] matr;
    public static void LoadFromFile()
    {
        Console.WriteLine(Matrix.matr);
    }
}


Как мне внутри функции LoadFromFile обратится к массиву matr?
Когда я пишу так
Код: c#
1.
matr = new double[strok, stolbcov];


Выдает ошибку:An object reference is required for the non-static field, method, or property 'Matrix.matr'
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38026082
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Почитать про статические методы;
2. Убрать из приведённого кода слово static.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027422
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. А вы не могли бы мне подсказать еще...
У меня есть конструктор в классе Matrix, но мне нужно один раз просто выделить память без конструктора. То есть выделить память - new Matrix, и чтобы не сработал конструктор. Можно такое сделать?
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027431
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже всплывало...
Код: c#
1.
matr = (Matrix)FormatterServices.GetUninitializedObject(typeof(Matrix));
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027610
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
object AA = (Matrix)FormatterServices.GetUninitializedObject(typeof(Matrix));
AA.LoadFromFile();



Попытался сделать так
Но:
'object' does not contain a definition for 'LoadFromFile' and no extension method 'LoadFromFile' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027640
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на кой ... это ляд object? Вы что сделать-то хотите?
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027655
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно создать обьект класса Matrix не вызывая конструктора.
У меня есть функция, LoadFromFile(), которая считывает из тхт файла массив. Этот массив нужно записать в переменную класса Matrix:
Код: c#
1.
2.
3.
class Matrix
{
    double[,] matr;


То есть в переменную matr. И до этого нужно еще создать объект класса Matrix, чтобы к примеру у объекта А в параметре matr были значения массива из текстового файла. Но проблема в том, что если я создаю объект класса Matrix, запускается конструктор, который автоматические выделяет место для для нового массива. А мне место нужно выделять позже, когда функция LoadFromFile() сработает, и будет известно о том, сколько в считываемом массиве столбцов и строк.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027674
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

:))
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027702
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bosscsМне нужно создать обьект класса Matrix не вызывая конструктора.
Неправильное желание. Задачу лучше решить путем создания соответствующего конструктора или подобным образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Matrix
{
    double[,] matr;
    public static Matrix LoadFromFile(string fileName)
    {
        var matrix = new Matrix();

        // код загрузки из файла и инициализации поля matrix.matr
        ...

        return matrix;
    }
}



И тебе явно не помешает прочитать книгу по C# потому что без базовых знаний ты напишешь код, который проще будет выбросить и переписать заново чем разбираться в нем.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38027763
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывают такие моменты, когда некогда учить C#. Мне лишь нужно сделать задание. Я не планирую быть программистом, по крайней мере пока. Если нужно будет и будет время - изучу тщательно, но не сейчас.

Код: 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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
using System;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization;

class Matrix
{
    double[,] matr;
    int n;
    int m;

  public Matrix(int a, int b)
    {
        int i, j;
        n = a;
        m = b;
        matr = new double[n, m];
        for (i = 0; i < n; i++)
            for (j = 0; j < m; j++)
            {
                Console.Write("a[{0},{1}]: ", i, j);
                matr[i, j] = Convert.ToDouble(Console.ReadLine());
            }
    }

    public Matrix()
    {
        int i, j;
        n = 3;
        m = 3;
        matr = new double[n, m];
        for (i = 0; i < n; i++)
            for (j = 0; j < m; j++)
                matr[i, j] = 0;
    }


    public void LoadFromFile()
    {
        string s = "";
        int strok = 0,
            stolbcov = 0,
            i = 0;
        string[] buf;
            Console.WriteLine("Загрузка массива из файла");
            StreamReader f = new StreamReader("d:/t.txt");


            while ((s = f.ReadLine()) != null)
            {
                stolbcov = s.Split(' ').Length;
                strok++;
            }

            f.BaseStream.Position = 0;
            f.DiscardBufferedData();//Очистка обьекта f

            matr = new double[strok, stolbcov];

            while ((s = f.ReadLine()) != null)
            {
                buf = s.Split(' ');
                for (int j = 0; j < stolbcov; j++)
                {
                    matr[i, j] = Convert.ToInt32(buf[j]);
                    Console.Write(" {0}", matr[i, j]);
                }
                i++;
                Console.WriteLine();
            }
        //return;

    }

}
    public void Show()
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            Console.WriteLine("\n");
            for (j = 0; j < m; j++)
                Console.Write(matr[i, j] + " ");
        }
    }

}

class Example
{

    static void Main()
    {
            Matrix AA = (Matrix)FormatterServices.GetUninitializedObject(typeof(Matrix));
            AA.LoadFromFile();
            AA.Show();
        
    }
}



На сколько я понимаю, функции LoadFromFile() в массив matr записывается массив из файла. Функция AA.Show(); должна вывести этот массив matr, но почему-то не выводит. Объясните, почему?
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38028008
O. Pnk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
Console.Write(matr[i, j] + " ");



Переписать:

Код: c#
1.
Console.Write(matr[i, j].ToString() + " ");



Ну и вообще лучше все переписать...
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38028026
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставьте точку останова в методе Show. У вас n = 0, это просто навскидку (конструктор-то мы вызывать не стали)... Ну и можно совместить заполнение массива и беготню по файлу...
Ну а вообще похвально, что даже не собираясь становиться программистом Вы пытаетесь разобраться самостоятельно...
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029285
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нашел ошибку в методе Show.
У меня сейчас другая проблема.
Есть функция
Код: c#
1.
2.
3.
4.
5.
public void LoadFromFile(string path)
{
int i=1;
int j=2;
}


Мне нужно вернуть 2 значения, i и j.
Пробовал записать их в массив, но выдает ошибку
Since 'Matrix.LoadFromFile(string)' returns void, a return keyword must not be followed by an object expression
То есть якобы возвращаемое значение должно быть void а у меня int[]. Хотя я думал что void - это любой тип.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029293
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
bosscsБывают такие моменты, когда некогда учить C#. Мне лишь нужно сделать задание.
Обратитесь в форум Работа. Там Вам за деньги сделают
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029322
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Мне нужно это самому понять. И делать за меня не нужно.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029344
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
bosscsЗачем? Мне нужно это самому понять. И делать за меня не нужно.
Так Вам сразу ответили, первым ответом - 13424253 .
Но вы, почему-то, не хотите сам понять, а ждете, что бы Вам основы разжевали
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029387
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и при чем тут статик? Вы мой пост читали вообще? Там функция не статическая
Мне просто нужно вернуть несколько значений из функции, так как в этой функции определяются количество столбцов и строк, и эти оба значения мне и нужно вернуть.
...
Рейтинг: 0 / 0
C# помогите с ООП
    #38029407
bosscs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже не нужно. Всем спасибо за помощь.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# помогите с ООП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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