在某些情況下,我希望我的方法返回XDocument
對象,並且在其他情況下返回XmlDocument
。爲不同返回類型的方法提出正確的設計
解決方案我看到:
使用返回類型
object
創建兩個不同的方法(DIFF的名稱);一個返回
XDocument
和其他返回XmlDocument
。使用不同的
out
參數類型創建方法過載。
你能提出一個好的設計嗎?
在某些情況下,我希望我的方法返回XDocument
對象,並且在其他情況下返回XmlDocument
。爲不同返回類型的方法提出正確的設計
解決方案我看到:
使用返回類型object
創建兩個不同的方法(DIFF的名稱);一個返回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");
第二種解決方案是比別人更好(首先特別是一個令人難以置信的壞主意)。但是我可以建議的最好的建議是a)告訴我們你想達到的目標*,而不是你認爲應該如何實現,b)更好地熟悉*抽象*的概念。 – Jon 2012-03-20 09:45:31