我有一个基类,如下所示:
public abstract class MetadataBase : NgageControl, INamingContainer, IValidator
{
public abstract Type DataType { get; }
public string SerializedData { get; set; }
....
}
然后我有一个泛型类扩展了上面的那个:
public abstract class MetadataBase<Tdata, Traw, Tsettings> : MetadataBase
where Tdata : new()
where Tsettings : new()
where Traw : INgageData
{
....
}
然后我有一组基于这样的类:
public class MetadataDateTime : MetadataBase<MetadataDateTimeData, NgageDateTime, MetadataDateTimeSettings>
{
public override Type DataType { get {return typeof(MetadataDateTimeData); } }
....
}
这种方法的原因是我可以这样做:
MetadataBase test = GetMetaData();
XmlSerializer xs = new XmlSerializer(test.DataType);
xs.Deserialize();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(test.SerializedData));
_xs.Deserialize(ms);
ms.Dispose();
我本可以从Type.GetGenericArguments方法中获取MetadataDateTimeData类型,但由于性能较慢,我不想开始使用反射,我不确定我是对的,但似乎从中获取类型被覆盖的财产会快得多。
这一切都运行正常,但现在看来我可能不得不支持静态获取类型。目前我正在创建这个类的一个实例只是为了获取它的类型以反序列化一些数据,这种方法真的会损害性能,所以我在考虑使用属性来指定数据类。但问题是你需要使用反射来读取属性,所以我也可以使用GetGenericArguments方法。
你会建议做什么?
谢谢,
乔