У меня довольно простая проблема, но, похоже, в C # нет решения.
У меня около 100 Foo
классов, каждый из которых реализует static FromBytes()
метод. Есть также несколько общих классов, которые должны использовать эти методы для своих собственных FromBytes()
. НО универсальные классы не могут использовать static FromBytes()
методы, потому что T.FromBytes(...)
является недопустимым.
Я что-то упускаю или нет возможности реализовать эту функцию?
public class Foo1
{
public static Foo1 FromBytes(byte[] bytes, ref int index)
{
// build Foo1 instance
return new Foo1()
{
Property1 = bytes[index++],
Property2 = bytes[index++],
// [...]
Property10 = bytes[index++]
};
}
public int Property1 { get; set; }
public int Property2 { get; set; }
// [...]
public int Property10 { get; set; }
}
//public class Foo2 { ... }
// [...]
//public class Foo100 { ... }
// Generic class which needs the static method of T to work
public class ListOfFoo<T> : System.Collections.Generic.List<T>
{
public static ListOfFoo<T> FromBytes(byte[] bytes, ref int index)
{
var count = bytes[index++];
var listOfFoo = new ListOfFoo<T>();
for (var i = 0; i < count; i++)
{
listOfFoo.Add(T.FromBytes(bytes, ref index)); // T.FromBytes(...) is illegal
}
return listOfFoo;
}
}
Я думаю, было бы несправедливо выбирать ответ в качестве принятого, ведь все ответы и комментарии по-разному повлияли на их разные взгляды. Было бы неплохо, если бы кто-нибудь написал хороший обзор различных подходов с указанием их плюсов и минусов. Это следует принять после того, как это поможет будущим разработчикам лучше всего.
ListOfFoo<T>.FromBytes(...)
? Вам все равно придется указать аргумент типа, не так ли? Например:ListOfFoo<Foo1>.FromBytes(...)
. Затем вы можете передать делегата в качестве дополнительного параметра (например, Предлагаемое обслуживание). Или вы называете это отражением? - person gehho   schedule 11.11.2013