C# 为具有不同返回类型的方法提出正确的设计
在某些情况下,我希望我的方法返回C# 为具有不同返回类型的方法提出正确的设计,c#,.net,C#,.net,在某些情况下,我希望我的方法返回XDocument对象,在其他情况下,我希望方法返回XmlDocument 我看到的解决方案: 使用返回类型对象 创建两种不同的方法(不同名称);一个返回XDocument,另一个返回XmlDocument 使用不同的out参数类型创建方法重载 你能提出好的设计方案吗?你用的是什么语言?vb.net if <condition 1> then Return XDocument else if <condition 2> then Ret
XDocument
对象,在其他情况下,我希望方法返回XmlDocument
我看到的解决方案:
对象
XDocument
,另一个返回XmlDocument
out
参数类型创建方法重载你能提出好的设计方案吗?你用的是什么语言?vb.net
if <condition 1> then
Return XDocument
else if <condition 2> then
Return XmlDocument
End if
if-then
返回XDocument
否则
返回XML文档
如果结束
我想说的是创建一个尽可能多地共享私有/受保护代码的方法。然后,当您必须专门化返回给调用方的内容时,请创建两个强类型的公共方法。您可以使用泛型方法:
public T GetDocument<T>();
我认为,您也可以通过以下方式获得重载返回类型
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");
第二个解决方案比其他解决方案好得多(第一个方案尤其是一个令人难以置信的坏主意)。但我能提出的最好建议是a)告诉我们你想要实现什么,而不是你认为应该如何实现;b)更好地熟悉抽象的概念。
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");