Класс каста <object>в класс <T> - PullRequest
0 голосов
/ 19 марта 2020

У нас есть обобщенный класс c с именем Context<T> where T : class, и мы создаем еще один класс Message, который будет использоваться вместе с предыдущим как Context<Message>. Вообще говоря, нам интересно, есть ли способ конвертировать Context<object> обратно в Context<Message>. Мы можем проверить, что объект имеет тип Message, но сделать Context<Message> context = (Context<Message>) otherContext;, где otherContext равен Context<object>

Возможно ли это каким-то образом?

1 Ответ

2 голосов
/ 19 марта 2020

Если вы предпочитаете приведение, попробуйте следующее:

class YourClass<T> where T : class
{
    public static implicit operator YourClass<T>(YourClass<object> instance)
    {
        // Create YourClass<T> from YourClass<object>
        // e.g. return new YourClass<T>(...)
    }
}

var obj = new YourClass<object>();
YourClass<Message> msg = obj;

В противном случае вы можете создать конструктор:

class YourClass<T> where T : class
{
    public YourClass(YourClass<object> obj)
    {

    }
}

Или вы можете использовать оба.

...