Function Return A Value Byref Instead Of The Default Byval?
Jan 18, 2012
Can a function return a value byref instead of the default byval? That is to say, allow me to directly edit the variable that it is retrieving instead of just giving me a copy of that variable.Right now I'm trying to write a function that will return, based on what the user has selected through a combobox, a particular setting (eg. My.Settings.somethingHere). I then want to be able to edit the setting directly through just calling the function. Is that at all possible?
If a function returns a private shared (static) string, or a string declared as a module level variable, is the returned a reference to the shared string's instance or a different string instance having the same value?
i have a strange issue today. Sample code is at the below of the post. The code that i have pointed out is too strange. According to my knowledge using return statement the functions return values as byval and copies the value to the stack. Also how can my class can reach outscope elements and change them. Take a look at to the code below. How this could be?
code Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim b As New ByteClass Dim sumArray As Long = 0
I am a student and i get confused when i see a lot of ByRef and ByVal arguments in a sub procedure. Can someone make it simple for me to understand when it should be used?
I've read a lot on this, but am having a hard time thinking through this tonight. (Maybe it's the hydrocodone... just had a root canal. i'm just starting on a class to handle client connections to a TCP server. Here is the code I've written thus far:
[Code]...
Now, on my Socket property, when setting the value, it is required to be ByVal. It is my understanding that the instance in memory is copied, and this new instance is passed to value, and my code sets _Socket to reference this instance in memory. Yes?
If this is true, then I can't see why I would want to use properties for anything but native types. I'd imagine there can be quite a performance hit if copying class instances with lots of members. Also, for this code in particular, I'd imagine a copied socket instance wouldn't really work, but I haven't tested it yet.
In VB.Net, I have an object named WorkflowButtonEventArgs that inherits from System.EventArgs.The WorkflowButtonEventArgs class contains two ByRef Properties. These are objects that are in memory, and I do not want them duplicated or copied in any way.
Can I pass the WorkflowButtonEventArgs object ByVal in VB.Net and have it still preserve the two ByRef definitions in WorkflowButtonEventArgs?Specifically, if I pass it ByVal:
Dim e As New WorkflowButtonEventArgs e has some ByRef properties RaiseEvent SomeEventName(e) ' e is passed ByVal Will the ByRef Properties/Members in e (WorkflowButtonEventArgs class) not be copied or duplicated in memory?
Long-story-short: Can I pass e ByVal, or do I need to pass it ByRef since it contains ByRef Properties?
[Code] What is the difference between ByRef and Byval in this function. When i call this function and debug it it shows no difference the two. Can any one explain me actually what happens.
ByRef (a.k.a. By Reference) points to where the object is in the memory. Any changes made to the object sent ByRef should change the values of the original object ByVal (a.k.a. By Value) points to a copy of the object. Any changes made to the object shouldn't change anything in the original object
Let's make an example:
Private Sub FormLoad() Dim a As String = "A" Dim b As String = "B"
[code]...
The second messagebox shows Baaaa - Buuuu instead of the expected A - Buuuu... but why is that? Apparently ByVal and ByRef does exactly the same thing. It seems like it sends the reference to the object when using ByVal, instead of making a new object.
Whenever I'm going to use a new API, I have to decide for each value whether I'm going to use byval or byref. Can someone explain me in what scenarios I should use which and why? Because lacking this knowledge kinda gives me the feeling of having no control over my code.I am aware about the other threads by people asking the same question, I have read them but its still not crystal clear for me.
I have seen a few people in the past confused on the usage of ByRef & ByVal in a Function/Sub's Signature. I figured i would make a simple example that demonstrates the difference of each.
Option Strict On Public Class Form1 Dim A As Integer = 100
[code]....
If you want something you've never had, you need to do something you've never done. If you believe something to be true, then one day you will be called upon to demonstrate that truth.
I just installed Visual Studio 2010 Service pack (proposed on Windows Update), and I can see a new feature on the "intellisense" that means when I write a Function or Sub in VB.NET it doesn't auto-complete parameters with ByRef or ByVal...
1) Is there anyway that I can configure this option back to how it was before?
2) If I don't specify ByX, which one is used by default? (it seems like it is always ByRef)
What is the difference between ByVal and ByRef? Please remember to mark the replies as answers if they help and unmark them if they provide no help.Welcome to the All-In-One Code Framework!
ByRef vs ByVal generates errors!?I had a method that used an Object Function Foo(ByRef bar as CustomObject) as Boolean this method generated errors, because some strange .NET Runtime things changed the bar object, causing its Dispose()al.A lot of time spent to understand the thing(where the ... object is changed), until somebody replaced ByRef by ByVal and object wasn't change anymore when passing to this method.As in my case the function Foo does NOT modify the bar, shouldn't ByRef or ByVal have the same effect?[code]
I have been working on this for a few days, and I am going around in circles. I can make the program work by including everything in the same sub procedure, but the assignment requires that I do certain tasks by using function procedures.What I need to do is take the contents of a text box, reverse the order of the first and last names, and add them to a list box. I can do that, just not by passing value from a function procedure. Here is my
Reading [URL] made me wonder whether the comments in there did apply to Strings in terms of performance. Since strings are copied before being passed, isn't it much more efficient (if the callee doesn't need a copy of string course) to pass strings ByRef?
Switching Byref to Byval on method calls I have many warnings raised due to: "Implicit conversion from xxxx to yyyy in copying the value of 'ByRef' parameter zzzz back to the matching argument."
My feeling is that it would be safe to change the function parameters from byref to byval as nothing special is being done with the reference type pointers inside these methods the reference types are simply being used and I think the behaviour would be exactly the same if running with a copy a pointer rather than the original.
Another consideration is that I have two classes which inherit from a base class. The same situation is occuring in that the byref params are causing implicit casting from the base class to the narrower concrete class. Again I can't see any problems with this code running byval either.Does anyone have any tips regarding use of parameters in functions when dealing with reference types?
Some of the other things that are currently being passed around byref in my project are database connection objects i.e. OracleConnection and SqlConnection. Is there any good reason for passing these around byref?
I have a class OrderManager, that takes a parameter of type LocalFuturesList on construction. Now.. It doesn't seem to matter if I use ByRef or ByVal here.. It still references the parent class instance of it. It also doesn't seem to matter if I type New or omit it.. Probably also because it's just an address reference. But why is it like this? And what type of objects "acts" in this way? Further I find that if I change the object in the parent class by deserializing from a file (with my method call shown), then suddenly this reference is broken in some way, so the OrderManager instance now holds Nothing I believe.If my observations are correct I see two challenges:
1. How to pass a list NOT by reference?
2. How to maintain a list reference through deserialization? [code]
I have some code that is transforming the coordinates of a line.I want to keep the original coords and I thought passing the line ByVal would be the best way.The original VB6 code used a temporary variable so that the original coords were not updated.I'm confused as when the X & y coords of 'line' are changed 'MyLine' is also changed. I had assumed only 'line' would change and 'MyLine' would remain unchanged'.
Private Sub TransformSaveLine(ByVal MyLine As LineType) Dim P As Integer Dim line As LineType Dim x As Double
I have a 3rd party (c#) class that raises an event. on accsing this event i want to copy the image property to a queue.
Dim myQ as queue Private Sub imageprocessor_NewImage() handles camera.NewImage myQ.Enqueue(imageprocessor.currentimage) End Sub
But when I view myQ at a later date it tells me the parameters of the images are not valid.Is it adding them by reference?i would have through adding an object to a queue was byval. how can i enforce this?
in my following code, i get the warning doesn't return a value on all codepaths
Public Function getbacktrace(ByVal backtrace As Integer) As StackFrame With New System.Diagnostics.StackTrace() If .GetFrame(backtrace + 1) Is Nothing Then exit function
[code]....
if i change exit function to return new stackframe,anyway, why doesn't Exit Function automatically returns a "dead" stackframe?
I started this tutorial on sub procedures and am having trouble trying to get this program to execute properly. The problem lies with the total. I am trying to figure out the math part of it. When I hit F5 I can see this
Item Quantity Price.
Pizza Slices Fries Soft Drinks
Total
But I can't get them to add up and display the quantity and price. I tried the ByVal and ByRef code but am not sure if I did it right
Here is the code that I have so far:
Public Class Form1
Private Sub btnCompute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompute.Click
I want to know what are classes , objects , a namespace , subroutines,functions,methods,properties and differemce betweem byval and byref in your words.
I know strings are immutable, so the minute you change a string reference's value .NET makes a brand new string on the heap. But what if you don't change the value of a string reference; rather, you simply pass it into a function ByVal -- does this operation copy the string value on the heap as well? My inclination is "no," but I'd like to confirm.
For example: Public Function IsStringHello(ByVal test As String) As Boolean Return (String.Compare(test, "Hello") = 0) End Function
Calling program: Dim myWord as String = "Blah" Dim matchesHello as Boolean = IsStringHello(myWord)
I know passing myWord by value makes a copy of the reference to "Blah", but since I have not tried to change the string itself, would it make another copy of the string on the heap?
im parsing an xml file using this code Private Function overview2(ByRef filePath As String)Dim reader As XmlTextReader = New XmlTextReader(filePath + "\movieData.xml")
[code]...
it works 80% of the time. What i mean is , i go through each node and when i find the overview node i read the data and send it to a text box. Im doing this for movies on disk. sometimes on certain movies it doesnt find the overview node even though it is there .
I'm currently invoking a function that takes ByRef parameters using Control.Invoke (which I notice specifies the Object parameter array to be ByVal) but the array of parameters I give it isn't updated by the function. Is this possible with VB.Net 2003 or must there be some error in my code?