2014-09-26 2 views
0

То, что я хочу сделать, это следующее:Как преобразовать целое число автоматически в мой тип?

class myNumber 
    sub new(i as integer) 
    end sub 
end class 

sub main() 
    Dim listl as new List(of myNumber) 
    listl.add(1) 
    ' some more stuff ... ' 
end sub 

поэтому вопрос в том, какая функция у меня переопределить, или то, что атрибут мне нужно добавить, так что код в основных компилируется?

Его не для какой-либо конкретной цели, просто любопытство.

+1

Не должно быть просто 'listl.add (новый MyNumber (1)) '? –

+0

, это было бы одним из способов, но мне интересно просто использовать listl.add (1), а затем программа автоматически вызывает конструктор с целым числом – lsteinme

+0

, вы создаете «Список (MyNumber)», который существует только в этом подпункте , кстати, поэтому для добавления в список вам нужно создать New 'MyNumbers'. Он содержит типы 'MyNumber', а не целые числа. – Plutonix

ответ

3

Вы должны обеспечить implicit conversion от System.Int32 до MyNumber. В этом случае я бы также использовал Structure вместо класса, так как он представляет неизменяемый тип значения.

В VB.NET вы должны переопределить Widening CType operator создать неявное преобразование:

Public Structure MyNumber 

    Public Sub New(value As Int32) 
     Me.Value = value 
    End Sub 

    Public Property Value As System.Int32 

    Public Overloads Shared Widening Operator CType(value As Int32) As MyNumber 
     Return New MyNumber(value) 
    End Operator 

End Structure 

Сейчас это работает:

Dim listl as new List(of MyNumber) 
listl.Add(1) 
+0

благодаря тому, что я искал – lsteinme

1

Вам просто нужно, чтобы изменить свою Add немного, чтобы создать новый экземпляр myNumber проходящий в требуемом целочисленном значении в конструкторе:

Class myNumber 
    Sub New(i As Integer) 

    End Sub 
End Class 

Sub Main() 
    Dim listl As New List(Of myNumber) 
    listl.Add(New myNumber(1)) 
    'some more stuff 
End Sub 
Смежные вопросы