Calling VB.net modules

D

Denny

We have a web project that references a VB.net project. We need to call
module for our webpage. Does anyone know how to do this from c#?
 
J

Jeff Johnson

We have a web project that references a VB.net project. We need to call
module for our webpage. Does anyone know how to do this from c#?

If the classes in the module are public, then you can access them just like
you would any other class.
 
J

Jeff Johnson

We have a web project that references a VB.net project. We need to call
module for our webpage. Does anyone know how to do this from c#?

If the classes in the module are public, then you can access them just like
you would any other class.
 
J

Jeff Johnson

VB Modules are translated into Namespaces in C#. For instance

Module sample

public function foo() as integer

end Module


From C#, call as

int i = sample.foo();

"sample" will be in pale blue as a NameSpace.

??? Classes appear in "pale blue" (light cyan, actually), not namespaces.
This would suggest that VB modules are treated as (static?) classes.
 
J

Jeff Johnson

VB Modules are translated into Namespaces in C#. For instance

Module sample

public function foo() as integer

end Module


From C#, call as

int i = sample.foo();

"sample" will be in pale blue as a NameSpace.

??? Classes appear in "pale blue" (light cyan, actually), not namespaces.
This would suggest that VB modules are treated as (static?) classes.
 
D

David Anton

Yes - VB modules are just static classes. The only difference is that when
coding in VB, VB allows you to optionally drop the module name when
referencing a member.
--
David Anton
http://www.tangiblesoftwaresolutions.com
Convert VB to C#, C++, or Java
Convert C# to VB, C++, or Java
Convert C++ to C#, VB, or Java
Convert Java to C#, C++, or VB
 
D

David Anton

Yes - VB modules are just static classes. The only difference is that when
coding in VB, VB allows you to optionally drop the module name when
referencing a member.
--
David Anton
http://www.tangiblesoftwaresolutions.com
Convert VB to C#, C++, or Java
Convert C# to VB, C++, or Java
Convert C++ to C#, VB, or Java
Convert Java to C#, C++, or VB
 
D

Denny

Thank you for your response.

It appeared the module itself was not listed as Public even though the
functions were.
 
D

Denny

Thank you for your response.

It appeared the module itself was not listed as Public even though the
functions were.
 
J

Jie Wang [MSFT]

A module in VB.NET is compiled into a *sealed* (not static because a static
class is an *abstract & sealed* class) class with static methods and no
constructors defined.

To differentiate the module from a normal sealed class, when a module is
compiled, the generated sealed class also has a
"Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute" with it.
So VB knows it is a module.

The C# doesn't know about that attribute so we can just use the class like
a normal static class.

By default, a newly added Module's protection level is Internal (Friend in
VB), you need to change it to Public so it can be accessed from outside the
assembly.

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

Jie Wang [MSFT]

A module in VB.NET is compiled into a *sealed* (not static because a static
class is an *abstract & sealed* class) class with static methods and no
constructors defined.

To differentiate the module from a normal sealed class, when a module is
compiled, the generated sealed class also has a
"Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute" with it.
So VB knows it is a module.

The C# doesn't know about that attribute so we can just use the class like
a normal static class.

By default, a newly added Module's protection level is Internal (Friend in
VB), you need to change it to Public so it can be accessed from outside the
assembly.

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

Jeff Johnson

A module in VB.NET is compiled into a *sealed* (not static because a static
class is an *abstract & sealed* class) class with static methods and no
constructors defined.

How can a class be both "abstract & sealed"? The MSDN documentation for the
sealed keyword states this:

It is an error to use a sealed class as a base class or to use the abstract
modifier with a sealed class.
 
J

Jeff Johnson

A module in VB.NET is compiled into a *sealed* (not static because a static
class is an *abstract & sealed* class) class with static methods and no
constructors defined.

How can a class be both "abstract & sealed"? The MSDN documentation for the
sealed keyword states this:

It is an error to use a sealed class as a base class or to use the abstract
modifier with a sealed class.
 
J

Jie Wang [MSFT]

How can a class be both "abstract & sealed"? The MSDN documentation for
the
sealed keyword states this:

It is an error to use a sealed class as a base class or to use the abstract
modifier with a sealed class.

Yes, you cannot define an abstract sealed class like this:

internal abstract sealed class MyClass {...}

You can only do this:

internal static class MyClass {...}

However, *static* is just a C# idea, when the line above being compiled
into IL, it looks like this:

class private abstract auto ansi sealed beforefieldinit MyClass
extends [mscorlib]System.Object

This is why I say "both abstract & sealed" - its how sealed class is
implemented.

Compare to VB's module IL:

class private auto ansi sealed Module1
extends [mscorlib]System.Object

So a VB module != a C# static class, as you can see from the IL.

Hope this makes it clear.

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

Jie Wang [MSFT]

How can a class be both "abstract & sealed"? The MSDN documentation for
the
sealed keyword states this:

It is an error to use a sealed class as a base class or to use the abstract
modifier with a sealed class.

Yes, you cannot define an abstract sealed class like this:

internal abstract sealed class MyClass {...}

You can only do this:

internal static class MyClass {...}

However, *static* is just a C# idea, when the line above being compiled
into IL, it looks like this:

class private abstract auto ansi sealed beforefieldinit MyClass
extends [mscorlib]System.Object

This is why I say "both abstract & sealed" - its how sealed class is
implemented.

Compare to VB's module IL:

class private auto ansi sealed Module1
extends [mscorlib]System.Object

So a VB module != a C# static class, as you can see from the IL.

Hope this makes it clear.

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

Jie Wang [MSFT]

It is .namespace:

namespace ClassLibrary1
{
.class private auto ansi sealed Module1
extends [mscorlib]System.Object
{
.custom instance void
[Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StandardModule
Attribute::.ctor()
}
}

However, the ".namespace" doesn't have its own information in the metadata
in the generated assembly, it is only served as a common prefix of the
types inside the namespace.

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

Jie Wang [MSFT]

Just thought of another question. I know in VB you can't inherit from a
module, but since the C# static class is coded as "abstract" in the IL, does
this mean you can inherit from a C# static class?

No you can't.

Note the C# static class is not only "abstract", but also "sealed":

class public abstract auto ansi sealed beforefieldinit MyStaticClass

Regards,

Jie Wang ([email protected], remove 'online.')

Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business days is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 

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