Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Siend
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 97
#1

Как правильно использовать классы? - C#

10.10.2012, 22:39. Просмотров 730. Ответов 1
Метки нет (Все метки)

Момент №1.
у меня есть дополнительный класс
C#
1
public class Matrix
в котором определена переменная
C#
1
MX
также в классе есть функция:
C#
1
2
3
4
5
6
public double ChObr(MX)
{
retemp = MX;
...
return retemp;
}
Я создаю основной класс, в котором работаю с дополнительным. В основной программе я создаю объект класса Matrix
C#
1
Matrix cp = new Matrix();
работаю с ней. после чего я вывожу на экран
C#
1
cp.ChObr(MX)
а затем просто
C#
1
cp.MX
но на экране я вижу два объекта cp.ChObr(MX)
из чего я делаю вывод что мой изначальный объект cp.MX меняется, хотя в доп. классе я в функции MX не меняю, а работаю только с retemp;
Вот мне и не понятно, почему же мне моя функция возвращает не новое значение, а меняет уже готовое.

Момент №2.
в том же доп. классе Matrix у меня есть функция изменения размера массива.
C#
1
2
3
4
5
6
7
8
9
public class Matrix
    {
        public double[,] MX = new double[0, 0];
 
        public static void ReMat<T>(ref T[,] OldMat, int x)
        {
            T[,] NewMat = new T[x, x];
            OldMat = NewMat;
        }
Внутри класса Matrix она отлично работает. Но когда я в основной программе пытаюсь к ней обратиться подобным образом:
C#
1
2
            Matrix cd = new Matrix();
            cd.MX = ReMat<double>(cp.MX, cp.MX.GetLength(0));
компилятор ругается на несколько недопустимых аргументов. Не понимаю как исправить.

Момент №3.
допустим у меня есть двумерный массив, который не является объектом класса Matrix
C#
1
double[,] cd = new double[rg, rg];
я его заполнил и после этого хочу применить к нему функцию из класса матрикс.
раньше если был объект cp класса Matrix я функцию вызывал cp.ChOrb(...) Теперь я пытаюсь сделать это след. образом
C#
1
cd = Matrix.ChObr(...);
на что компилятор снова ругается - для нестатического поля требуется ссылка на объект.

Добавлено через 1 час 51 минуту
Первый момент решен. Оказалось что cp.MX = cd.MX недопустимая в данном контексте запись, чтобы присвоить значения на элементов матриц нужно было поэлементно в цикле это делать.

Второй и Третий моменты решены - метод класса должен быть статическим, тогда к нему обратиться можно напрямую по имени класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно использовать классы? (C#):

Как правильно использовать стек, использовать вершину стека и т.п - C#
Научите пожалуйста правильно использовать стек, использовать вершину стека и т.п. Просто стек очень нужен - очень полезный оператор.

Как и зачем использовать абстрактные классы? - C#
Здравствуйте. Помогите пожалуйста. Мне интересно как и зачем использовать абстрактные классы. Где стоит их применять?

Как использовать классы, которых нет, но которые быть должны? - C#
На C++ (gcc) так делается- скачиваешь библиотеку, распихиваешь файлы по директориям и работаешь А тут как? Допустим, нашёл я код и...

Как использовать несколько файлов формата cs в языке C#, их методы и классы? - C#
Как пользоваться несколькими файлами формата cs в языке C#? проект состоит из нескольких файлов cs например консольный главный ...

Как правильно наследовать абстрактные классы - C#
Здравствуйте , в данный момент читаю книгу по C# и получается не состыковка в книге пишется одно, а компилятор говорит что ему все равно...

.NET 4.x Как правильно использовать потоки? - C#
Доброго времени суток столкнулся со следующей проблемой не могу выполнить функцию в потоке protected string readDocuments(string...

1
gitarillo
721 / 521 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
11.10.2012, 09:05 #2
Цитата Сообщение от Siend Посмотреть сообщение
Момент №1.
Так у вас и получается, что значения одинаковы, ибо одно присвоено другому в методе ChObr
Цитата Сообщение от Siend Посмотреть сообщение
public double ChObr(MX)
этой записи вообще не понял

Цитата Сообщение от Siend Посмотреть сообщение
Момент №2.
В методе ReMat массив передается по ссылке, значит и вызов этого метода должен идти как
C#
1
cd.MX = ReMat<double>(ref cp.MX, cp.MX.GetLength(0));
Цитата Сообщение от Siend Посмотреть сообщение
на что компилятор снова ругается - для нестатического поля требуется ссылка на объект.
Ну так метод ChObr не является статическим, значит вызов его может быть только через экземпляр класса.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2012, 09:05
Привет! Вот еще темы с ответами:

.NET 4.x Lock как правильно использовать? - C#
Ребят, я тут только с lock-ом разбираюсь... Я так понял что его параметр это ключ доступа, соответственно с разным ключом в один и тот же...

Как правильно использовать trackbar? - C#
Всем привет, появилась задача сделать расчет % 3-мя trackbar`ми. Пример: Имеем 3 состояния, вещь создастся без дополнений Вещь...

Как правильно использовать MessageBox? - C#
как мне правильно использовать if catch для того чтоб при отсутствии файла при подключении мне выводилось сообщение :)private void...

.NET 4.x Как правильно использовать DataSource? - C#
естm пример (частично взят из MSDN ссылка) // Initialize an array with data to bind to the combo box. ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru