Как получить доступ к данным?
Снова странного хочу.
Дано: два независимых класса. Могут иметь общего, если поможет, предка.
В методе первого объекта инстанцируется второй объект и вызывается его метод.
Первый (или вызывающий) объект гарантированно имеет поле типа Дата.
Второй - может иметь такое же, а может использовать часть структуры.
Ограничения:
Передавать параметры конструктору или методу - не разрешается по условиям задачи - оба имеют ограничения на имплементацию.
Так же нельзя каким либо прямым методом, например - через присвоение проперти, передать ссылку на вызывающий класс.
Т.е. никакой явной, написанной прогером, передачи выполнять нельзя - код создания и вызова должен быть как в методе Go1().
Требуется:
Получить доступ из второго объекта в полю первого исходя из того что вызов конструктора сделан в методе первого.
Примерно так:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using System.Threading;namespace Templates.OrganisationSample{struct Data{public string MyData;}
class Class1{[ThreadStaticAttribute]public Data data;
public Class1(){data = new Data();data.MyData = "This is my data";
}public void Go1()
{// I can't pass this into Class2 constructor// or Go() method.Class2 cs2 = new Class2();cs2.Go2();}}class Class2{Data data;public Class2(){// need to access Data in Class1}public void Go2()
{Debug.Write("Here I need a Data.MyData from Class1");
}}}
Т.е. мне нужно в конструкторе или в методе (можно - базового класса) получить данные из вызывающего объекта.
На деле - все еще хуже - это дело выполняется в потоке и есть шанс что будет выполнятся в отдельных потоках.
Ну и плюс - оно еще и рекурсивное... как прямо, так и косвенно...
Понимаю, что мне тут нужно полное нарушение базовых принципов ООП, но что тут поделаешь...
Будут идеи как нарушить?
У меня пока одна идея - запихать вызывающий объект в треадстатик переменную до вызова, а при вызове - вынуть оттуда, сохранить в локальной, выполнить метод и восстановить... Что-то типа а-ля-стек в вызываемом объекте... Но что-то сложновато выглядит... хотя... в фортране - делал.
Не суть. Решено другим методом - через треадстатик...