我有一个看起来像这样的基类:
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 方法。
你会推荐做什么?
谢谢,
乔