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

Узнай цену своей работы

Формулировка задачи:

Добрый день, не могу что-то понять реализацию передачи параметров по ссылкам, есть класс А, он работает допустим с MySQL соответственно у него есть свойство MySQL, ну за сам объект MySQL отвечает другой класс Б в котором то же соответственно есть свойство MySQL, так вот, каким образом сделать взаимодействие этих двух свойств? по идеи нужно что бы свойство MySQL класса А было как бы ссылкой на свойство MySQL класса Б, через ref сделать не удалось, так как передачу параметров ref через метод класса A SetMysql(ref MySql Mysql) работает, но в данный момент у класса Б свойство Mysql которое передается является в данный момент NULL, и инициаллизируется позже...

Решение задачи: «Реализация передачи параметров по ссылкам»

textual
Листинг программы
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" };
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5