Можно ли определить общий тип из ссылки на производный тип?

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

Так, например, с псевдокодом:

public struct Packet <T>
{
    public ITest<T> Object;          
}

Итак, теперь скажем, у меня есть класс:

public class SomeObject : ITest<float>

Я хотел бы назначить SomeObject пакету без необходимости вводить <float> в коде, чтобы он был более динамичным.

Некоторый пример псевдокода того, что я хотел бы сделать:

Packet packet = new Packet(SomeObject); // would now be Packet<float> type

Тогда это будет означать, что пакет является Packet<float>, потому что класс наследует интерфейс, для которого установлено значение float.

Это возможно ? Если да, то как бы вы это сделали?

Может быть? По сути, я не хочу вручную указывать <float> как тип, который должен быть в состоянии определить его из класса и типа, который он наследует? Я напишу псевдопример того, что я хотел бы сделать.

WDUK 21.12.2020 08:44
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вывод типа не работает для конструкторов, поэтому для этого вам понадобится фабричный метод:

public static class PacketFactory {
    public static Packet<T> FromITest<T>(ITest<T> itest) {
        var packet = new Packet<T>();
        packet.Object = itest;
        return packet;
    }
}

Теперь вы можете создавать свои пакеты без <float>:

var packet = PacketFactory.FromITest(new SomeObject());

Ах, здорово, это аккуратный способ сделать это! Спасибо :)

WDUK 21.12.2020 08:54

Другие вопросы по теме