Реализация передачи параметров по ссылкам - 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" };
}
}
}