vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Option Strict On lässt das Einschränken von Typ x zu Typ x ... 
Autor: keco
Datum: 25.08.08 13:07

Hallo,

bei folgendem Code erhalte ich 2 Fehler ("Option Strict On" lässt das Einschränken von Typ "test.Base" zu Typ "test.B" beim Zurückkopieren des ByRef-Parameterwerts "value" in das entsprechende Argument nicht zu.):
Public Class Form2
    Private aa As New A
    Private bb As New B
 
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button3.Click
        aa.Decrease(bb)
        Label2.Text = bb.Punkte.ToString
    End Sub
 
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button4.Click
        bb.Decrease(aa)
        Label1.Text = aa.Punkte.ToString
    End Sub
End Class
 
Public MustInherit Class Base
    Protected Friend pPunkte As Integer = 10
 
    MustOverride Property Punkte() As Integer
 
    MustOverride Function Decrease(ByRef value As Base) As Integer
End Class
 
Public Class A
    Inherits Base
 
    Public Overrides Function Decrease(ByRef value As Base) As Integer
        value.pPunkte -= 1
    End Function
 
    Public Overrides Property Punkte() As Integer
        Get
            Return Me.pPunkte
        End Get
        Set(ByVal value As Integer)
            pPunkte = value
        End Set
    End Property
End Class
 
Public Class B
    Inherits Base
 
    Public Overrides Function Decrease(ByRef value As Base) As Integer
        value.pPunkte -= 1
    End Function
 
    Public Overrides Property Punkte() As Integer
        Get
            Return Me.pPunkte
        End Get
        Set(ByVal value As Integer)
            pPunkte = value
        End Set
    End Property
End Class
Und zwar bei den beiden Zeilen: "aa.Decrease(bb)" und "bb.Decrease(aa)".

Warum ich den Fehler erhalte ist mir auch klar, weil das Objekt vom Typ A (bzw. B) in Base konvertiert wird und anschließend durch ByRef wieder zurück. Ich würde ja Base als Generische Klasse definieren und den Parameter in der Methode Decrease als T definieren, dann kann ich allerdings mit der Klasse A beispielsweise nur die Punkte von Klasse eines einzigen Types verändern, aber es kann sein, dass es sowohl die Punkte von Klasse A als auch B ändern soll oder eventuell auch noch C oder D etc pp. Ich konnte das Problem auch nicht über Schnittstellen oder ähnliches lösen.

Deswegen wollte ich euch fragen, ob ihr eine Möglichkeit kennt mein Vorhaben umzusetzen? Muss ich dafür irgendwie den CType() Operator mit Widening und Narrowing in den einzelnen Klassen überschreiben? Ich habe bisher damit noch nie gearbeitet und weiß nicht, ob das der richtige Ansatz ist. Könnte ihr mir helfen?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Option Strict On lässt das Einschränken von Typ x zu Typ x ....1.340keco25.08.08 13:07
Re: Option Strict On lässt das Einschränken von Typ x zu Typ...866ModeratorDaveS25.08.08 13:18
Re: Option Strict On lässt das Einschränken von Typ x zu Typ...890keco25.08.08 13:25
Re: Option Strict On lässt das Einschränken von Typ x zu Typ...883ModeratorDaveS25.08.08 13:40
Re: Option Strict On lässt das Einschränken von Typ x zu Typ...854keco25.08.08 13:47
Re: Option Strict On lässt das Einschränken von Typ x zu Typ...849keco25.08.08 14:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel