2013-05-22 72 views
0

我正在嘗試向所有對象類型添加一個方法,類似於.toString()。我將主要用於datrowitems(並且這些通過sqltype獲取autocasted)。我想稱之爲myDatarow("myField").myMethod()。一般情況下是否可以添加一個方法而不擴展每個可能的對象類型?是否有一種其他類型繼承的一般類型?將一般方法添加到數據項技術(擴展)

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

在預感中,我不知道你想做什麼。 –

+0

@約翰哦,好的。我將來會避免這種情況。 @ G. Stoynev它有什麼問題? – Devcon

回答

0

我不希望這種方法添加到datarowobject本身,因爲mydatarow(「田」)可以是任何類型的,並沒有按不繼承datarow。

實現你所需要的一個選項是像普通的那樣擴展DataRow,但傳遞列名作爲參數。例如,(在VB雖然):

<Extension> Sub myMethod(dr As DataRow, columnName As String) 
    If dr.Item(columnName) Is DBNull.Value Then 
     ' your code 
    ElseIf TypeOf dr.Item(columnName) Is String Then 
     ' your code 
    Else 
     ' 
    End If 
End Sub 

因此,與其像myDatarow("myField").myMethod()您打算調用,您可以調用它像這樣:

myDatarow.myMethod("myField") 
+0

似乎是更好的方式。謝謝! – Devcon

0

所有的類都繼承自Object類。所以你可以嘗試添加一個擴展方法到Object類。

但請三思而後決定你是否真的想這樣做。爲什麼你需要爲每種可能的類型添加一個擴展方法?

+0

我已經嘗試過,但它不起作用。擴展對象不適用於類型(對象的方法不會是整型的方法)。我試圖很容易處理dbnullexceptions(例如toString),但對於其他類型,如整數(通過添加.toInteger()方法)。 – Devcon

0

嘗試使用擴展方法。擴展方法與普通方法類似,但在另一個類中定義。

在你的情況下,它會是這個樣子:

public static class MyMethods 
{ 
    public static MyResult MyMethod(this DataRow row) 
    { 
      //code goes here, you can access only the public members of the row class 
    } 
} 
+0

我猜他想把擴展方法添加到所有類型,不僅適用於數據行 – Shyju

+0

Shyju是對的。我不想將此方法添加到數據對象本身,因爲mydatarow(「Field」)可以是任何類型,並且不會繼承數據行。 – Devcon