为具有不同返回类型的方法提出正确的设计
本文关键字:方法 返回类型 | 更新日期: 2023-09-27 18:28:17
在某些情况下,我希望我的方法返回XDocument
对象,而在其他情况下XmlDocument
。
我看到的解决方案:
-
使用返回类型
object
-
创建两个不同的方法(差异名称(;一个返回
XDocument
,另一个返回XmlDocument
。 -
创建具有不同
out
参数类型的方法重载。
你能提出好的设计吗?
您可以使用泛型方法:
public T GetDocument<T>();
当调用为 GetDocument<XDocument>
时返回一个XDocument
,当调用为 GetDocument<XmlDocument>
时返回一个XmlDocument
。
在你可以做的方法中
if (T is XmlDocument) ...
else if (T is XDocument) ...
else throw new ArgumentException("Invalid type for T");
你用的是什么语言?vb.net?
if <condition 1> then
Return XDocument
else if <condition 2> then
Return XmlDocument
End if
我会说创建一个尽可能多地共享私有/受保护代码的方法。然后,当您必须专门化返回给调用方的内容时,请创建两个强类型的公共方法。
我认为,您也可以通过以下方式使用重载返回类型......
public interface IXDocument
{
XDocument GetDocument(string str);
}
public interface IXMLDocument
{
XMLDocument GetDocument(string str);
}
public class Document : IXDocument, IXMLDocument
{
public XDocument IXDocument.GetDocument(string str)
{
// return XDocument
}
public XMLDocument IXMLDocument.GetDocument(string str)
{
// return XMLDocument
}
}
XDocument returnedXDocument = ((IXDocument)Instance of Docuement).GetDocument("value");
// - and/or
XMLDocument returnedXMLDocument = ((IXMLDocument)Instance of Docuement).GetDocument("value");