【发布时间】:2020-05-07 04:18:13
【问题描述】:
如果值为空,我需要覆盖 XMLWriter 的方法“WriteElementString”以不写入元素,下面的代码不起作用,尝试 override 和 new关键字,但它仍然进入框架方法。
public static void WriteElementString(this XmlWriter writer,
string localName,
string value)
{
if (!string.IsNullOrWhiteSpace(value))
{
writer.WriteStartElement(localName);
writer.WriteString(value);
writer.WriteEndElement();
}
}
答案很接近,但正确的解决方案是:
public abstract class MyWriter : XmlWriter
{
private readonly XmlWriter writer;
public Boolean skipEmptyValues;
public MyWriter(XmlWriter writer)
{
if (writer == null) throw new ArgumentNullException("Writer");
this.writer = writer;
}
public new void WriteElementString(string localName, string value)
{
if (string.IsNullOrWhiteSpace(value) && skipEmptyValues)
{
return;
}
else
{
writer.WriteElementString(localName, value);
}
}
}
【问题讨论】:
-
您实际上不能覆盖静态方法。至少不是直接的。这是一个关于类似问题的好问题/答案:stackoverflow.com/questions/2074454/override-a-static-method
标签: c# overriding