Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Siend
2 / 2 / 4
Регистрация: 23.11.2011
Сообщений: 97
#1

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

10.10.2012, 22:39. Просмотров 752. Ответов 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 недопустимая в данном контексте запись, чтобы присвоить значения на элементов матриц нужно было поэлементно в цикле это делать.

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

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

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

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

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

Lock как правильно использовать?
Ребят, я тут только с lock-ом разбираюсь... Я так понял что его параметр это...

1
gitarillo
727 / 527 / 45
Регистрация: 17.06.2010
Сообщений: 1,026
Записей в блоге: 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
Привет! Вот еще темы с решениями:

Как правильно использовать MessageBox?
как мне правильно использовать if catch для того чтоб при отсутствии файла при...

Как правильно использовать foreach?
Добрый день, прошу помочь мне упростить мой код. Помню как-то это можно было...

Как правильно использовать DataSource?
естm пример (частично взят из MSDN ссылка) //...

Как правильно использовать потоки?
Доброго времени суток столкнулся со следующей проблемой не могу выполнить...


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

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

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