Объекты с одинаковыми названиями
От: curt_russel  
Дата: 03.06.05 06:13
Оценка:
Ребята, поможите.
Как мне из одного экземпляра некоторого класса передать данные в другой экземпляр этого же класса, причем названия экземпляров одинаковые?

P.S.
Хотя это значения особого не имеет, но эти экземпляры приведены к разным типам.
Re: Объекты с одинаковыми названиями
От: Oyster Украина https://github.com/devoyster
Дата: 03.06.05 06:20
Оценка:
Здравствуйте, curt_russel, Вы писали:

_>Ребята, поможите.

_>Как мне из одного экземпляра некоторого класса передать данные в другой экземпляр этого же класса, причем названия экземпляров одинаковые?

_>P.S.

_>Хотя это значения особого не имеет, но эти экземпляры приведены к разным типам.

Напиши соответствующий метод. Кстати, а что такое "название экземпляра класса"?
http://rsdn.org/File/27948/bf.gif
Объекты с одинаковыми названиями
От: Аноним  
Дата: 03.06.05 06:25
Оценка:
Вы бы не могли это расшифровать? Мы же не ясновидцы.. код привилдите что-ли для смеха..
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Примерный код...
От: curt_russel  
Дата: 03.06.05 06:43
Оценка: :)
Выглядит это примерно так:

class A
{
}

class B : A
{
}

class C : A
{
}

class Main
{
A ekz_A;

Main(int inPrm) // входной параметр
{
switch(inPrm)
{
case(0):
ekz_A = new B;
break;
case(1):
ekz_A = new C;
break;
}
}
...
// потом создаю еще экземпляр типа C
void myMethod()
{
ekz_A = new C;
}
// и нужно из первого ekz_A,допустим типа B, передать данные в ekz_A типа С.
// причем я не могу изменить названия (ekz_A — название экземпляра), так как обработка вся завязана именно
// на таком.
}
Re[2]: Примерный код...
От: Oyster Украина https://github.com/devoyster
Дата: 03.06.05 06:50
Оценка:
Здравствуйте, curt_russel, Вы писали:

_>Выглядит это примерно так:


[... code skipped ...]

_>// и нужно из первого ekz_A,допустим типа B, передать данные в ekz_A типа С.

_>// причем я не могу изменить названия (ekz_A — название экземпляра), так как обработка вся завязана именно
_>// на таком.
_>}

Итак, ekz_A — имя переменной (или поля или свойства), но никак не имя экземпляра класса. ekz_A всего лишь содержит ссылку на экземпляр класса. Соответственно, после того как ты в ekz_A записал ссылку на новый экземпляр, ссылка на предыдущий экземпляр была потеряна (если ты её нигде больше не держал) и предыдущий объект попал в цепкие лапы GC. Заведи вторую переменную, в общем.
http://rsdn.org/File/27948/bf.gif
Re[2]: Примерный код...
От: the.metalex Беларусь  
Дата: 03.06.05 06:55
Оценка:
"curt_russel" <23131@users.rsdn.ru> wrote in message news:1204083@news.rsdn.ru...
> Выглядит это примерно так:
>
> class A
> {
> }
>
> class B : A
> {
> }
>
> class C : A
> {
> }
>
> class Main
> {
> A ekz_A;
>
> Main(int inPrm) // входной параметр
> {
> switch(inPrm)
> {
> case(0):
> ekz_A = new B;
> break;
> case(1):
> ekz_A = new C;
> break;
> }
> }
> ...
> // потом создаю еще экземпляр типа C
> void myMethod()
> {
> ekz_A = new C;
> }
> // и нужно из первого ekz_A,допустим типа B, передать данные в ekz_A типа С.
> // причем я не могу изменить названия (ekz_A — название экземпляра), так как обработка вся завязана именно
> // на таком.
> }

Ну как бы тебе объяснить... ekz_A — это ссылка. Теперь по порядку.
ekz_A = new B(); — создаётся объект типа B. Твоя ссылка ekz_A указывает на него.
ekz_A = new C(); — создаётся объект типа С. Твоя ссылка уже указывает на него. И более того, на предыдущий объект уже ничего не указывает и в твоём случае он потерян.
Если ты счас напишешь ekz_A = new B(); То создатся третий объект и предыдущие два будут утеряны!

Так что если тебе надо сохранить все объекты, то создавай для них разные ссылки.
ekz_A1 = new B();
ekz_A2 = new С();
ekz_A3 = new С();

И передевай что хочешь. ekz_A1.field = ekz_A3.field
Только не спрашивай почему поле field не будет видно, если оно не объявлено в A )))
Posted via RSDN NNTP Server 1.9
Re[3]: Объяснение ситуации
От: curt_russel  
Дата: 03.06.05 07:28
Оценка:
TM>Ну как бы тебе объяснить... ekz_A — это ссылка. Теперь по порядку.
TM>ekz_A = new B(); — создаётся объект типа B. Твоя ссылка ekz_A указывает на него.
TM>ekz_A = new C(); — создаётся объект типа С. Твоя ссылка уже указывает на него. И более того, на предыдущий объект уже ничего не указывает и в твоём случае он потерян.
TM>Если ты счас напишешь ekz_A = new B(); То создатся третий объект и предыдущие два будут утеряны!

TM>Так что если тебе надо сохранить все объекты, то создавай для них разные ссылки.

TM>ekz_A1 = new B();
TM>ekz_A2 = new С();
TM>ekz_A3 = new С();

TM>И передевай что хочешь. ekz_A1.field = ekz_A3.field

TM>Только не спрашивай почему поле field не будет видно, если оно не объявлено в A )))

Я уж не совсем такой ламер, как вам могло бы показаться.
Я понимаю, что при пересоздании нового экземпляра ссылка на предыдущий будет потеряна.
И про разные ссылки я уже говорил, что мне НЕЛЬЗЯ создать разные ссылки, иначе вопроса не было бы.
На названии этой ссылки завязан весь класс.
Мне нужно извне создать несколько экземпляров (внешних) класса, которые в свою очередь внутри себя будут использовать одну и ту же ссылку на другой экземпляр класса. Не могу же я по ходу программы переопределять название этой ссылки для каждого внешнего экземпляра! Она одна для всех!
Вот и вопрос: а как из одного внешнего экземпляра передать данные в другой внешний экземпляр одного и того же класса, когда второй внешний экземпляр создается внутри первого внешнего экземпляра?!?!
Ситуация понятна?
Re[4]: Объяснение ситуации
От: Gushulay  
Дата: 03.06.05 07:35
Оценка:
Здравствуйте, curt_russel, Вы писали:

TM>>Ну как бы тебе объяснить... ekz_A — это ссылка. Теперь по порядку.

...
_>Ситуация понятна?

Ситуация понятна. Один экземпляр объекта на все классы — прямой путь к статическому члену.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: Объяснение ситуации
От: Аноним  
Дата: 03.06.05 10:01
Оценка:
_>Я уж не совсем такой ламер, как вам могло бы показаться.
_>Я понимаю, что при пересоздании нового экземпляра ссылка на предыдущий будет потеряна.
_>И про разные ссылки я уже говорил, что мне НЕЛЬЗЯ создать разные ссылки, иначе вопроса не было бы.
_>На названии этой ссылки завязан весь класс.
_>Мне нужно извне создать несколько экземпляров (внешних) класса, которые в свою очередь внутри себя будут использовать одну и ту же ссылку на другой экземпляр класса. Не могу же я по ходу программы переопределять название этой ссылки для каждого внешнего экземпляра! Она одна для всех!
_>Вот и вопрос: а как из одного внешнего экземпляра передать данные в другой внешний экземпляр одного и того же класса, когда второй внешний экземпляр создается внутри первого внешнего экземпляра?!?!
_>Ситуация понятна?
Смотри туда -> http://www.dofactory.com/Patterns/PatternSingleton.aspx
Способ, как сделать так, чтобы экземпляр твоего класса был всегда один на всю систему.
Re[5]: Объяснение ситуации
От: curt_russel  
Дата: 03.06.05 10:06
Оценка:
А>Смотри туда -> http://www.dofactory.com/Patterns/PatternSingleton.aspx
А>Способ, как сделать так, чтобы экземпляр твоего класса был всегда один на всю систему.

Пока ничего не понятно, но все равно большое спасибо за желание помочь!
Re[5]: Объяснение ситуации
От: Аноним  
Дата: 03.06.05 11:48
Оценка:
Если не понятно, может не так тебя поняли? Давай еще раз более конкретно как именно надо. Без первый/второй, один/другой, да и по мне фраза "которые в свою очередь внутри себя будут использовать одну и ту же ссылку на другой экземпляр класса" в рамках С# звучит немного двойственно. Имхо лучшее описание проблемы упрощенный вариант кода с обисанем что именно и куда хочется записать.
-----
Нулевое оформления постов благодаря Opere.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.