Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как получить доступ к данным?

226  
Murr патриот21.09.17 12:38
Murr
21.09.17 12:38 

Снова странного хочу.


Дано: два независимых класса. Могут иметь общего, если поможет, предка.


В методе первого объекта инстанцируется второй объект и вызывается его метод.


Первый (или вызывающий) объект гарантированно имеет поле типа Дата.

Второй - может иметь такое же, а может использовать часть структуры.


Ограничения:

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

Так же нельзя каким либо прямым методом, например - через присвоение проперти, передать ссылку на вызывающий класс.

Т.е. никакой явной, написанной прогером, передачи выполнять нельзя - код создания и вызова должен быть как в методе 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");

}
}

}

Т.е. мне нужно в конструкторе или в методе (можно - базового класса) получить данные из вызывающего объекта.

На деле - все еще хуже - это дело выполняется в потоке и есть шанс что будет выполнятся в отдельных потоках.

Ну и плюс - оно еще и рекурсивное... как прямо, так и косвенно...


Понимаю, что мне тут нужно полное нарушение базовых принципов ООП, но что тут поделаешь...


Будут идеи как нарушить?


У меня пока одна идея - запихать вызывающий объект в треадстатик переменную до вызова, а при вызове - вынуть оттуда, сохранить в локальной, выполнить метод и восстановить... Что-то типа а-ля-стек в вызываемом объекте... Но что-то сложновато выглядит... хотя... в фортране - делал.

#1 
AlexNek патриот07.10.17 16:07
AlexNek
NEW 07.10.17 16:07 
в ответ Murr 21.09.17 12:38

Нифига не понял, разбираться некогда.

#2 
Murr патриот13.10.17 16:33
Murr
NEW 13.10.17 16:33 
в ответ AlexNek 07.10.17 16:07

Не суть. Решено другим методом - через треадстатик...

#3