0

我有一个看起来像这样的基类:

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 方法。

你会推荐做什么?

谢谢,

4

0 回答 0