我正在尝试向所有对象类型添加一个方法,类似于.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,但将列名作为参数传递。例如(虽然在 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")