Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамическое приведение типа / 16 сообщений из 16, страница 1 из 1
13.07.2006, 13:25
    #33850804
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Можно ли как-то на шарпе реализовать такую вещь?



VariableDefinition vd = new VariableDefinition();


Type myType = vd.GetType();

vd = (myType)new VariableDefinition();

Пока я вижу только возможность использовать дефайн. Еще какие-то возможности
есть?

Просто поле myType должно быть у каждого класса. Если это делать с помощью
дефайн, то тогда каждый класс должен быть в своем классе. Не будут ли они
пересекаться?Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
13.07.2006, 13:38
    #33850862
nikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, alexdp.

А какой смысл динамически приводить экземпляр класса к своему же типу?
И что такое "дефайн" в C#?
...
Рейтинг: 0 / 0
13.07.2006, 13:39
    #33850866
Mab
Mab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, alexdp, Вы писали:

A>Можно ли как-то на шарпе реализовать такую вещь?
Очень загадочный пример из которого ничего вообще не ясно.

A>Пока я вижу только возможность использовать дефайн.
А такой возможности попросту нет.
...
Рейтинг: 0 / 0
13.07.2006, 13:59
    #33850970
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
"nikov" <55905@users.rsdn.ru>; сообщил/сообщила в новостях следующее:
news:1999279@news.rsdn.ru...

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

К своему типу написано для примера.
На деле у меня есть метод, который возвращает дженерик List с параметром
типа класса

class Myclass1
{
  static List<Myclass1> ReturnCollection()
}

class Myclass2
{
  static List<Myclass2> ReturnCollection()
}

Мне просто не хочется ручками менять в коде класса Myclass2, Myclass2 на
Myclass1, а просто где-то его один раз определить в теле класса и потом
приводить к єтому определению.Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
13.07.2006, 14:01
    #33850977
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
"Mab" <9336@users.rsdn.ru>; сообщил/сообщила в новостях следующее:
news:1999282@news.rsdn.ru...
> Здравствуйте, alexdp, Вы писали:
>
> A>Можно ли как-то на шарпе реализовать такую вещь?
> Очень загадочный пример из которого ничего вообще не ясно.

См. http://rsdn.ru/forum/?mid=1999336, может єтот фрагмент прояснит
ситуацию.

> A>Пока я вижу только возможность использовать дефайн.
> А такой возможности попросту нет.

Да, я уже посмотрел документацию :)Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
13.07.2006, 14:02
    #33850984
Mab
Mab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, alexdp, Вы писали:

A>См. http://rsdn.ru/forum/?mid=1999336, может єтот фрагмент прояснит
A>ситуацию.
Увы, он мало чего проясняет :xz: Пример использования этого хозяйства нужен.
...
Рейтинг: 0 / 0
13.07.2006, 14:02
    #33850987
Magic_Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
vd = (myType)new VariableDefinition();

Можно сделать
YourType ggg = Activator.CreateInstance(YourType) as YourType;
Вроде так...
Успехов!
http://www.be-mobile.ru
также: программа для агенств персонала "Домашний персонал"
...
Рейтинг: 0 / 0
13.07.2006, 14:16
    #33851049
nikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, alexdp.

До сих пор не совсем понятно, что Вам нужно, однако складывается впечатление, что Вам нужно размножить по классам некий сходный код, и при этом ситаацию нельзя свести к наследованию. Если это именно так, то Вам могут помочь инструменты метапрограммирования.
...
Рейтинг: 0 / 0
13.07.2006, 14:17
    #33851053
Динамическое приведение типа
Здравствуйте, alexdp, Вы писали:


A>"nikov" <55905@users.rsdn.ru>; сообщил/сообщила в новостях следующее:
A>news:1999279@news.rsdn.ru...

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

A>К своему типу написано для примера.
A>На деле у меня есть метод, который возвращает дженерик List с параметром
A>типа класса
A>
A>class Myclass1
A>{
A>  static List<Myclass1> ReturnCollection()
A>}

A>class Myclass2
A>{
A>  static List<Myclass2> ReturnCollection()
A>}
A>

A>Мне просто не хочется ручками менять в коде класса Myclass2, Myclass2 на
A>Myclass1, а просто где-то его один раз определить в теле класса и потом
A>приводить к єтому определению.

Не знаю как в c#, но в с++ это бы выглядело так:




template <typename T>
struct base
{
   typedef T derived_type;
   typedef std::list<derived_type> Collection;
   /*static*/ virtual Collection ReturnCollection() = 0;
};

class Myclass1 : public base<Myclass1>
{/**/};

Не понятно, почему они у тебя static?
...
Рейтинг: 0 / 0
13.07.2006, 14:22
    #33851088
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
" Константин Л. " <44487@users.rsdn.ru>; сообщил/сообщила в новостях
следующее: news:1999384@news.rsdn.ru...
> Здравствуйте, alexdp, Вы писали:

> Не знаю как в c#, но в с++ это бы выглядело так:
>
>
>
>
> template <typename T>
> struct base
> {
>   typedef T derived_type;
>   typedef std::list<derived_type> Collection;
>   /*static*/ virtual Collection ReturnCollection() = 0;
> };
>
> class Myclass1 : public base<Myclass1>
> {/**/};
>
>

Да, такой вариант мне бы очень хорошо подошел.
Только у шарпа нет тайпдефа.

> Не понятно, почему они у тебя static?

Это по условию моей задачи они такие.Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
13.07.2006, 14:59
    #33851261
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
"nikov" <55905@users.rsdn.ru>; сообщил/сообщила в новостях следующее:
news:1999383@news.rsdn.ru...
> Здравствуйте, alexdp.
>
> До сих пор не совсем понятно, что Вам нужно, однако складывается
> впечатление, что Вам нужно размножить по классам некий сходный код, и при
> этом ситаацию нельзя свести к наследованию. Если это именно так, то Вам
> могут помочь
> инструменты

> метапрограммирования.

У меня есть набор классов,
каждый из которых среди прочего должен уметь возвращать свою дженерик
коллекцию.
И мне не хочется в каждом из классов ручками переправлять тип элементов
находящихся в коллекции.
Как правильно указал Константин Л., здесь бы помог тайпдеф, но в шарпе его
нет и можно юзать только using, которій мне не подходит по той причине, что
классі разделяют общий неймспейс.Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
13.07.2006, 15:10
    #33851309
nikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, alexdp, Вы писали:

A>Как правильно указал Константин Л., здесь бы помог тайпдеф

Не думаю. Давайте попробуем развернуть тайпдеф.


using System.Collections.Generic;

public abstract class Base<T>
{
   public abstract static List<T> ReturnCollection();
}

class Myclass1 : Base<Myclass1>
{
    /* ... */
}

Но ничего не выходит, так как статические методы не могут быть абстрактными. ;)
Может быть, Вам заюзать синглетоны и избавиться от статических методов?
...
Рейтинг: 0 / 0
13.07.2006, 15:29
    #33851380
reallovehe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Convert.ChangeType() ?
...
Рейтинг: 0 / 0
13.07.2006, 18:02
    #33852112
alexdp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
> Здравствуйте, alexdp, Вы писали:
>
> A>Как правильно указал Константин Л., здесь бы помог тайпдеф
>
> Не думаю. Давайте попробуем развернуть тайпдеф.
>
>
> using System.Collections.Generic;
>
> public abstract class Base<T>
> {
>   public abstract static List<T> ReturnCollection();
> }
>
> class Myclass1 : Base<Myclass1>
> {
> /* ... */
> }
>
>
> Но ничего не выходит, так как статические методы не могут быть
> абстрактными. ;)
> Может быть, Вам заюзать синглетоны и избавиться от статических методов?

Сорри, у меня они не абстрактные. Просто не дописал реализацию.
не доследил.Posted via RSDN NNTP Server 2.0
...
Рейтинг: 0 / 0
14.07.2006, 10:23
    #33853046
nikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое приведение типа
Здравствуйте, Magic_Max, Вы писали:

M_M>vd = (myType)new VariableDefinition();

M_M>Можно сделать
M_M>YourType ggg = Activator.CreateInstance(YourType) as YourType;

Это не скомпилируется. Если YourType — идентификатор типа, то его нельзя передавать в качестве аргумента в метод CreateInstance.
...
Рейтинг: 0 / 0
14.07.2006, 13:15
    #33853775
Динамическое приведение типа
Здравствуйте, alexdp, Вы писали:


A>" Константин Л. " <44487@users.rsdn.ru>; сообщил/сообщила в новостях
A>следующее: news:1999384@news.rsdn.ru...
>> Здравствуйте, alexdp, Вы писали:

>> Не знаю как в c#, но в с++ это бы выглядело так:
>>
>>
>>
>>
>> template <typename T>
>> struct base
>> {
>>   typedef T derived_type;
>>   typedef std::list<derived_type> Collection;
>>   /*static*/ virtual Collection ReturnCollection() = 0;
>> };
>>
>> class Myclass1 : public base<Myclass1>
>> {/**/};
>>
>>

A>Да, такой вариант мне бы очень хорошо подошел.
A>Только у шарпа нет тайпдефа.

>> Не понятно, почему они у тебя static?

A>Это по условию моей задачи они такие.

ок:




public abstract class base<T>
{
    public abstract List<T> Collection();
}

class dr : base<dr>
{
    public virtual/*or sealed*/ List<T> Collection();
}
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамическое приведение типа / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]