2013-05-22 2 views
0

Я пытаюсь добавить метод ко всем объектам, подобным .toString(). Я буду использовать его первичным для datrowitems (и они автоматически загружаются через sqltype).Добавление общего метода к datarowitems (Расширение)

Я хочу называть его myDatarow("myField").myMethod(). Можно ли вообще добавить метод, не расширив для себя каждый возможный тип объекта? Существует ли общий тип, из которого наследуются все другие типы?

+0

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

В догадках мне как-то не нравится то, что вы пытаетесь сделать. –

+0

@ Джон О, хорошо. Я буду избегать этого в будущем. @ Г. Стойнев, в чем дело? – Devcon

ответ

0

Я не хочу, чтобы добавить этот метод к самому datarowobject потому mydatarow («поле») может быть любого типа и Безразлично Наследовать датаров.

Одним из вариантов достижения того, что вам нужно, является расширение 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), но для других типов, таких как integer (добавление сущностей .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

Я думаю, он хочет добавить метод расширения ко всем типам, а не только к datarow – Shyju

+0

Shyju is right. Я не хочу добавлять этот метод к самому datarowobject, потому что mydatarow («Поле») может быть любого типа и не наследует datarow. – Devcon

Смежные вопросы