为具有不同返回类型的方法提出正确的设计

本文关键字:方法 返回类型 | 更新日期: 2023-09-27 18:28:17

在某些情况下,我希望我的方法返回XDocument对象,而在其他情况下XmlDocument

我看到的解决方案:

  1. 使用返回类型 object

  2. 创建两个不同的方法(差异名称(;一个返回XDocument,另一个返回XmlDocument

  3. 创建具有不同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");