[VB .net] Reference type clone alternatief

Pagina: 1
Acties:

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
In vb .net is het dus zo dat als je twee variabelen hebt van een reference type (dezelfde type) en de een toekent aan de ander (var1 = var2) dan zijn beide var dus een reference naar dezelfde instance.

Nu heb ik gelezen dat je door de IClonable interface te implementeren, de instance makkelijk kunt kopieren. (var1 = var2.Clone of var1 = DirectCast(var2.clone, type) )

Maar is het niet zo dat je hem gewoon veel simpeler kunt clonen door gewoon dit te doen?

Visual Basic:
1
var1 = (var2)


In dit geval returnen de () toch de value van var2 en niet de plek waar hij naartoe point?

Of ben ik aan het blaten :? (zoiets had ik ook gelezen namelijk)(weet niet meer waar)

En nog iets, is het mischien mogelijk om delegates zo te manipuleren dat ze naar een variabele wijzen en niet naar een method? Of is er een makkelijker truukje voor?

Noushka's Magnificent Dream | Unity


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Visual Basic Language Specification

9.2.2 Parenthesized Expressions

A parenthesized expression consists of an expression enclosed in parentheses. The value of the parenthesized expression is the value of the expression within the parentheses.

ParenthesizedExpression ::= ( Expression )
Haakjes om een expressie zijn er alleen om de volgorde waarin een expressie geevalueerd wordt aan te geven, bv. (1 + 2) * 3 ipv 1 + 2 * 3.

[ Voor 0% gewijzigd door marcusk op 23-10-2002 16:53 . Reden: bla += 1 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dat weet ik wel hoor.
Het gaat me alleen om of er nou de value terug gegeven wordt of een reference naar de instance waar dat object ook naar toe wijst.
oftewel, is
Visual Basic:
1
var1 = var2 'beide zijn dus een reference type

gelijk aan
Visual Basic:
1
var1 = (var2)

:?
Dat heb je nog niet beantwoord.

EDIT:

Hij gaat dus eerst kijken naar de expressie tussen de haakjes. Dat is dat object. Wat geeft die dan terug?

Noushka's Magnificent Dream | Unity


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
uit de quote die ik gaf kun je opmaken dat het inderdaad gelijk is.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
marcusk schreef op 23 oktober 2002 @ 17:32:
uit de quote die ik gaf kun je opmaken dat het inderdaad gelijk is.
Visual Basic Language Specification

9.2.2 Parenthesized Expressions

A parenthesized expression consists of an expression enclosed in parentheses. The value of the parenthesized expression is the value of the expression within the parentheses.

ParenthesizedExpression ::= ( Expression )
Dus geen reference...

Dan is het dus NIET gelijk. Of wel :? 8)7 |:( :X

Wat is het nou? :'(

Noushka's Magnificent Dream | Unity


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
hehe :)

De waarde van een niet-primitieve variabele in VB.Net is altijd een reference. Ik hoop dat het zo duidelijk is :)

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
ok dankje wel

Noushka's Magnificent Dream | Unity


Verwijderd

Je eerste probleem is opgelost? :)
Michali schreef op 23 oktober 2002 @ 16:30:
En nog iets, is het mischien mogelijk om delegates zo te manipuleren dat ze naar een variabele wijzen en niet naar een method? Of is er een makkelijker truukje voor?
Wat wil je dan precies doen? Want een delegatie is namelijk
a data structure that refers to a static method or to a class instance and an instance method of that class
en ze zijn erg handig bij het bouwen van events... :P

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik wil dus iets hebben dat met ongeveer dezelfde werking als een pointer in c++. Ik weet dat er geen pointers zijn in vb, maar ik heb dus gelezen wat delegates zijn en weet hoe ze werken. Nu vraag ik me dus af of je er ook mee naar een variabele kan pointen.

Noushka's Magnificent Dream | Unity


Verwijderd

Waar heb je het precies voor nodig?

Want er zijn in VB.NET zeker nog wel pointers (of eigenlijk: nog steeds) aanwezig en je kunt bijvoorbeeld de Pointer-class gebruiken in de System.Reflection-namespace (in Mscorlib.dll) als wrappertje, met als methods Box en Unbox.

PS. Wie wil er nou nog in VB.NET proggen als je C# hebt? :7

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Referenties in .net zijn het equivalent van pointers. Het verschil is slechts dat de laatste naar een willekeurig stuk geheugen wijzen (eventueel een ongeldig stuk geheugen), terwijl een referentie gegarandeerd null is of naar een object wijst. Delegates hebben hier overigens heel erg weinig mee te maken :)

Wat wil je eigenlijk precies doen?
PS. Wie wil er nou nog in VB.NET proggen als je C# hebt? :7
Hehe idd :)

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik vind zowieso de editer van vb vele malen relaxter. Het is precies even snel en ik ben vb gewend. C# heeft een paar voordelen boven vb en anderom ook. Dus als ik al met vb werk is het beter om er mee te blijven werken. VB6 was nog een mindere taal, maar vb .net is echt heel erg veel verbeterd. Dan is de keuze voor mij erg makkelijk.

Ik wil het gebruiken voor een pathfinding techniek genaamd A* (a star) en wil dus bij een nieuw gevonden node een link maken naar zijn parent node, zodat als ik aan het einde van het zoeken een geschikt pad heb gevonden dat ik dan makkelijk een route van start naar goal kan maken. Ik kan wel de locatie opslaan maar dat is natuurlijk een stuk langzamer dan een simpele pointer.

Noushka's Magnificent Dream | Unity


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
dat kun je dus simpelweg met een reference doen (misschien een goed id als je nog even goed kijkt naar de definitie daarvan ;))

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En dan maak je dus juist geen clone.

We adore chaos because we like to restore order - M.C. Escher


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ok ik wil dit dus gaan doen met een valuetype, een structure.

Noushka's Magnificent Dream | Unity

Pagina: 1