のように、すべてのオブジェクト タイプにメソッドを追加しようとしてい.toString()
ます。私はそれをdatrowitemsのプライマリとして使用します(そして、これらはsqltypeを介して自動キャストされます)。
のように呼びたいmyDatarow("myField").myMethod()
。考えられる各オブジェクトタイプをそれ自体に拡張せずに、一般にメソッドを追加することは可能ですか? 他のすべてのタイプが継承している一般的なタイプはありますか?
すべてのクラスはクラスから継承していObject
ます。Object
したがって、クラスに拡張メソッドを追加してみてください。
しかし、よく考えて、本当にこれをやりたいと決めてください。可能性のあるすべての型に拡張メソッドを追加する必要があるのはなぜですか?
拡張メソッドを使用してみてください。拡張メソッドは通常のメソッドのようなものですが、別のクラスで定義されています。
あなたの場合、次のようになります。
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
}
}
mydatarow("Field") は任意の型にすることができ、datarow を継承しないため、このメソッドを datarowobject 自体に追加したくありません。
必要なものを達成するためのオプションの 1 つは、通常のように 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")