Я не уверен, как сформулировать свой заголовок, но я пытаюсь создать структуру, которая является универсальной, и я хочу, чтобы общий тип определялся ссылкой, которую я передаю.
Так, например, с псевдокодом:
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.
Это возможно ? Если да, то как бы вы это сделали?
Вывод типа не работает для конструкторов, поэтому для этого вам понадобится фабричный метод:
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());
Ах, здорово, это аккуратный способ сделать это! Спасибо :)
Может быть? По сути, я не хочу вручную указывать <float> как тип, который должен быть в состоянии определить его из класса и типа, который он наследует? Я напишу псевдопример того, что я хотел бы сделать.