Usage of the "New" KeyWord

S

Sam

Hi everyone

Could anyone help me understand the usage of the "New" keyword I'm new to
VB.Net.

1. Why do we use the "New" keyword on some object type variables such as the
myPen of the example below and not with the bgColor. Both the Pen and Color
are objects

Dim myPen As Pen = New Pen(Color.AquaMarine)
Dim bgColor As Color = Color.LightYellow

2. Why do properties such as Size, Location, Font... of controls require a
new instance of their classes when we want to change their properites at run
time


Thanks

Sam
 
W

William Ryan eMVP

Color is a Structure, hence a ValueType whereas Pen is a Reference type.
Everythign in .NET is an 'object' btw. That's why even though integer is an
object , Dim i as Integer is ok. This may help a little if you aren't
familiar with the distinction
http://www.knowdotnet.com/articles/referencetypes2.html

The difference in behavior between valuetypes and referencetypes is NOT
trivial by any means, but understanding the differences is pretty
straightforward. For instance, pass in a Value Type by value to function
and modify it, the original is still in tact. Pass in a Reference Type
ByVal to a method and any changes made to it are made to the object you
passed in.

I'm not sure I totally understand your second question but I'll take a
guess. Those properties are instance properties, meaning they belong to the
instance. Other properties are static (shared in VB) which means they
belong to the class and not a specific instance.

HTh,

Bill

--
W.G. Ryan MVP Windows - Embedded

Have an opinion on the effectiveness of Microsoft Embedded newsgroups?
Let Microsoft know!
https://www.windowsembeddedeval.com/community/newsgroups
 
J

Jerry

William,

When you say "Pass in a Reference Type ByVal to a method and any changes
made to it are made to the object you
passed in." I am afraid you are incorrect.

A string type in VB.NET is a reference type. If you send it "ByVal" to a
Subroutine or function and change it inside the subroutine or function the
original will remain intact.

Regards
 
G

Guest

Jerry said:
William,

When you say "Pass in a Reference Type ByVal to a method and any changes
made to it are made to the object you
passed in." I am afraid you are incorrect.

A string type in VB.NET is a reference type. If you send it "ByVal" to a
Subroutine or function and change it inside the subroutine or function the
original will remain intact.

Regards


But if you look closely at the String definition :

A String is called immutable because its value cannot be modified once it
has been created. Methods that appear to modify a String actually return a
new String containing the modification. If it is necessary to modify the
actual contents of a string-like object, use the System.Text.StringBuilder
class

Anytime you 'change' the string vaiable you are changing the reference to
point at another possibly new string object, not changing the data within
the original.
 
G

Guest

2. Why do properties such as Size, Location, Font... of controls require a
new instance of their classes when we want to change their properites at run
time



When you write this...
myForm.Size.Width = 10

This is what happens behind the scenes...
Dim X as Size 'Size is a value type
X = myForm.Size Get a copy of the form's size value
x.Width = 10 'Change the copy

Which is why you need to do this...
myForm.Size = X 'Replace the form's size with a copy of X


*******************

A Font is an immutable class, that is a class that cannot be altered. The reason is buried in the deep inner-workings of Windows.

One thing is for sure, it reduces the chance for errors. If you could change a font object instead of replacing it, you might accidentally change the font on a bunch of unrelated controls. Why? Because they probably share the same font object.
 
G

Guest

1. Why do we use the "New" keyword on some object type variables such as the
myPen of the example below and not with the bgColor. Both the Pen and Color
are objects

Dim myPen As Pen = New Pen(Color.AquaMarine)
Dim bgColor As Color = Color.LightYellow

A Color is a simple class, so it doesn't matter if you used the names constants or the New operator.

A Pen uses Windows resources, and has to be treated with respect.

If you create a Pen using New, you need to call Dispose on it when your done.

There is also Pens class. Example...

Dim myPen As Pen = Pens.AquaMarine

If you get an existing Pen from the Pens class, then you may not dispose it. If you try, you will get this message.... "Additional information: You may not change this Brush because it does not belong to you."
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top