Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
1

Реализация передачи параметров по ссылкам

26.11.2013, 14:59. Показов 650. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, не могу что-то понять реализацию передачи параметров по ссылкам, есть класс А, он работает допустим с MySQL соответственно у него есть свойство MySQL, ну за сам объект MySQL отвечает другой класс Б в котором то же соответственно есть свойство MySQL, так вот, каким образом сделать взаимодействие этих двух свойств? по идеи нужно что бы свойство MySQL класса А было как бы ссылкой на свойство MySQL класса Б, через ref сделать не удалось, так как передачу параметров ref через метод класса A SetMysql(ref MySql Mysql) работает, но в данный момент у класса Б свойство Mysql которое передается является в данный момент NULL, и инициаллизируется позже...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2013, 14:59
Ответы с готовыми решениями:

Способы передачи параметров в функции. Реализация динамических двумерных массивов
в программе написать функции для сортировки массива. Подсчитать количество перестановок элементов...

Задание параметров заголовкам, абзацам и ссылкам
Доброй ночи, Друзья! Продолжаю обучение верстке, и возник затык с настройкой параметров контента....

Передача параметров по значению и по константным ссылкам применительно к шаблонам
Такс... С xvalue разобрались, вопрос следующий. Допустим у меня есть шаблон некой операции....

Программа передачи параметров
НАПИСАНИЕ ПРОГРАММЫ ПЕРЕДАЧИ ПАРАМЕТРОВ С ПОМОЩЬЮ параметров командной строки

7
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
26.11.2013, 16:02 2
Приведите код. А то не понятно.
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
26.11.2013, 16:22  [ТС] 3
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
   class A
   {
      public MySql MySql = null;
      public Init ()
      {
         this.MySql = new MySql();
      }
   }
 
   class B
   {
      public MySql MySql = null;
      public void SetRef(ref MySql MySql)
      {
         this.MySql = MySql;
      }
   }
 
   A A = new A();
   B B = new B();
   B.SetRef(ref this.A.MySql);
 
   this.A.Init();
 
   if((B.MySql == null)
   {
      // Сработает так как B.MySql null а нужно что бы он как бы был указателем на A.MySql
   }

Вот как сделать так что бы был указатель

Добавлено через 2 минуты
Я щас делаю через события, оно просто запрашивает и уже возвращает MySQL, т.е. лезет выше а не работает внутри объекта, а хотелось бы что бы было как описано выше
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
26.11.2013, 16:26 4
А если так

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
 A a = new A();
            B B = new B();
            B.SetRef(a);
 
            a.Init();
 
            if (B.MySql == null)
            {
                //Вот теперь сработает
            }
 
private class A
        {
            public MySql MySql = null;
 
            public void Init()
            {
                this.MySql = new MySql();
            }
        }
 
        private class B
        {
            private A _a;
 
            public MySql MySql
            {
                get { return _a.MySql; }
            }
 
            public void SetRef(A a)
            {
                _a = a;
            }
        }
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
26.11.2013, 17:38  [ТС] 5
А в классе B случаем _а не будет с MySQL null так как _a он не инициализированный? или он уже будет сам глядеть и понимать _а это ссылка, вить это копия объекта буквально...
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
26.11.2013, 21:48 6
Цитата Сообщение от ibelych Посмотреть сообщение
вить это копия объекта буквально...
Это не копия, а ссылка.
1
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 18:16  [ТС] 7
Неожиданно, спасибо)

Добавлено через 7 часов 41 минуту
C#
1
2
3
4
5
6
7
8
9
            // где то с верху
            public Setting SETTING;
 
 
            // Какой то метод
            this.CONNECT.SetRef(this.SETTING);
            this.CONNECT.SendGet(); (1)
            this.SETTING = new Setting();
            this.CONNECT.SendGet(); (2)
C#
1
2
3
        public byte[] SendGet()
        {
        // и в 1 и во втором 2 this.Setting будет равен null!!!!!
Так что все таки это не ссылка а копия объекта
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.11.2013, 18:25 8
Цитата Сообщение от ibelych Посмотреть сообщение
и в 1 и во втором 2 this.Setting будет равен null!!!!!
Невозможно судя по коду

Добавлено через 20 секунд
Если я вообще понял, что ты хотел сделать.

Добавлено через 1 минуту
Покажи весь код у прошлого приведённого тобой примера, тогда станет ясно, я и так догадываюсь, но чёт не охота включать телепата, поэтому проще тебе, наверное, выложить код

Добавлено через 22 секунды
Весь относящийся к примеру, а не этот огрызок непонятно чего.

Добавлено через 1 минуту
Изучи внимательно пример, скопируй в новый проект, запусти в отладке, пройдись по шагам, читая попутно комментарии, и всё поймёшь.
C#
1
2
3
4
5
6
7
8
9
10
    public class Person
    {
        public override string ToString()
        {
            return string.Format("Возраст: {0} Имя: {1}", Age, Name);
        }
 
        public string Name { get; set; }
        public uint Age { get; set; }
    }
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
using System;
using System.IO;
 
namespace ConsApp_RefOut
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = new Person() { Age = 18, Name = "Изначально созданный" };
            Console.WriteLine("Вызываем метод: GetPersonWithoutRefOrOut");
 
            //Созданный объект внутри метода "так и останется внутри метода"
            GetPersonWithoutRefOrOut(person1); 
            Console.WriteLine("Результат его работы:");
            Console.WriteLine(person1);
            Console.WriteLine("Как видно созданный объект внутри метода не передался" +
                " за его пределы, так как на него ссылалась копия ссылки Person\n");
 
            Person person2;
 
            GetPersonRef(ref person1); //передаём уже проинициализированную ссылку
            GetPersonOut(out person2); //передаём НЕ проинициализированную ссылку
 
            Console.WriteLine(person1);
            Console.WriteLine(person2);
 
            string text; //нет смысла инициализировать, только для передачи в метод
            if (TryReadText(out text, "Бла-бла-бла"))
                Console.WriteLine(Environment.NewLine + text);
            else
                Console.WriteLine(Environment.NewLine + "Текст не удалось прочитать");
 
            Console.ReadKey();
        }
 
        public static bool TryReadText(out string text, string filePath)
        {
            if (File.Exists(filePath))
            {
                text = File.ReadAllText(filePath);
                return true;
            }
            text = string.Empty;
            return false;
        }
 
        //передаётся копия ссылки Person
        public static void GetPersonWithoutRefOrOut(Person person)
        {
            person = new Person { Age = 90, Name = "Из метода GetPersonWithoutRefOrOut" };
        }
 
        //передаётся ссылка по ссылке, но передаваемая ссылка
        //должна быть инициализирована хотя бы null
        public static void GetPersonRef(ref Person person)
        {
            person = new Person { Age = 20, Name = "Из метода ref" };
        }
 
        //передаётся ссылка по ссылке, но передаваемая ссылка
        //может быть не инициализирована
        public static void GetPersonOut(out Person person) 
        {
            person = new Person { Age = 30, Name = "Из метода out" };
        }
    }
}
0
27.11.2013, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 18:25
Помогаю со студенческими работами здесь

Механизмы передачи параметров
Составить алгоритм и программу, реализующую разные механизмы передачи параметров, на примере...

Способ передачи параметров по адресу
Даны два вещественных числа х, y. Составить программу, содержащую функцию, которая вычисляет сумму ...

Способы передачи параметров в функцию
#include<iostream> using namespace std; void swap1(int x, int y) { int z; z=x; x=y; y=z;...

Способы передачи параметров в процедуры
Доброго времени суток! Уже который день пытаюсь разобраться с ранее неизвестным мне языком...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru