Saya memiliki masalah yang agak sederhana, tetapi sepertinya tidak ada solusi dalam C#.
Saya memiliki sekitar 100 kelas Foo
yang masing-masing mengimplementasikan metode static FromBytes()
. Ada juga beberapa kelas generik yang akan menggunakan metode ini untuk FromBytes()
-nya sendiri. TAPI kelas generik tidak dapat menggunakan metode static FromBytes()
, karena T.FromBytes(...)
ilegal.
Apakah saya melewatkan sesuatu atau tidak ada cara untuk mengimplementasikan fungsi ini?
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;
}
}
Menurut saya tidak adil jika memilih jawaban sebagai jawaban yang diterima, lagipula jawaban dan komentar memberikan kontribusi yang berbeda-beda dengan pandangan mereka yang berbeda. Alangkah baiknya jika seseorang menulis gambaran yang bagus tentang berbagai pendekatan beserta kelebihan dan kekurangannya. Itu harus diterima setelah ini membantu pengembang masa depan dengan baik.
ListOfFoo<T>.FromBytes(...)
statis? Anda tetap harus menentukan argumen tipe, bukan? Misalnya:ListOfFoo<Foo1>.FromBytes(...)
. Kemudian Anda dapat meneruskan delegasi sebagai parameter tambahan (seperti Servy diusulkan). Atau Anda menyebutnya melalui refleksi? - person gehho   schedule 11.11.2013