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

时间:2012-03-20 09:41:24

标签: c# .net

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

我看到的解决方案:

  1. 使用返回类型object

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

  3. 使用不同的out参数类型创建方法重载。

  4. 你能提出好的设计吗?

4 个答案:

答案 0 :(得分:2)

您可以使用通用方法:

public T GetDocument<T>();

在调用XDocument时返回GetDocument<XDocument>,在调用XmlDocument时返回GetDocument<XmlDocument>

在你可以做的方法中

if (T is XmlDocument) ...
else if (T is XDocument) ...
else throw new ArgumentException("Invalid type for T");

答案 1 :(得分:0)

你正在使用哪种语言? vb.net?

if <condition 1> then
 Return XDocument
else if <condition 2> then
 Return XmlDocument
End if

答案 2 :(得分:0)

我想创建一个方法,尽可能多地共享私有/受保护的代码。然后,当您必须专门化返回给调用者的内容时,创建两个强类型的公共方法。

答案 3 :(得分:0)

我认为,您也可以通过以下方式获得重载返回类型....

                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");