Curtis
Curtis

Reputation: 103358

Structure a class inside a class?

Currently, if I have different classes containing functions etc, I would structure them all in the 1 VB file titled whatever the main Class is. For example:

MainClass.vb:

Class MainClass

     Function FunctionA() as String
        ...
     End Function

     Class SubClass

          Function SubFunction() as String
              ....
          End Function

          Class SubSubClass

               ......

          End Class

      End Class

End Class

However, the problem with this is the file can become 1000s of lines long making hard to find portions of code.

Is there a way I can store SubClass in a file such as MainClass.SubClass.vb so that its easier to locate classes? Or is there a better, more standard, way of doing this?

Upvotes: 1

Views: 2144

Answers (3)

Feynman
Feynman

Reputation: 21

Yes, partial classes in vb.net will allow you to do exactly what you request.

MainClass.vb

Partial Class MainClass

     Function FunctionA() as String
        ...
     End Function

End Class

MainClass.SubClass.vb

Partial Class MainClass

   Class SubClass
      Function SubFunction() as String
          ....
      End Function
   End Class

End Class

Leaving aside questions of re-architecting and re-factoring, which is not the question you asked, with a very large class file, described as 1000s of lines long, there may be some additional quick-fix benefits in using even more partial class files to enact a separation of concerns. Use Partial to split the unwieldy class file into logically related bundles of code across multiple smaller .vb files.

How advisable, how effective, or how dirty, this action is is obviously debatable, but the facility does exist, and it would therefore be up to you to take a view on how beneficial/problematic this partitioning option may or may not prove to be.

http://en.wikipedia.org/wiki/Partial_class

Upvotes: 2

Hans Kesting
Hans Kesting

Reputation: 39274

At least C# understands "partial classes" where you can spread the code over multiple files (within the same assembly)

EDIT
I expected VB to have partial classes also (I only work in C# myself), but as noted in the comments, it does have them.

In C# I could code something like this:

File MainClass.cs:

public partial class MainClass  // note the "partial" keyword
{
   // some method declarations etc.
}

File MainClass.SubClass.cs:

public partial class MainClass // have to repeat this to hook up correctly
 // but an "Implements" or "Extends" could be different
{
   // maybe some other methods

   private class SubClass
   {
      // etc.
   }
}

But the real question is: do those subclasses really need to be inner classes of that "MainClass", or could they be top-level classes themselves?

Upvotes: 3

Nicholas
Nicholas

Reputation: 754

Instead of packaging all classes into 1 class you should use multiple classes and Namespaces to store and use your code. Especially with larger Projects this can help you organize your code.

Note: The name of a Namespace may not be the same as one of class. But you can use the same Namespace for multiple classes.

i.e.

Create a "MainClass.vb"

Create a "SubClass.vb"

Code "SubClass.vb"

    Namespace Main

        Public Class SubClass

            Function SubFunction() as String
                ....
            End Function

        End Class

    End Namespace

So you can access the Class SubClass by "Main.SubClass" If you have a lot of classes and files you could i.e. create for each Namespace a SubFolder

Main
|-- SubMain
|---|-- SubSubMain
|-- AnotherSubMain
|---|-- SubAnotherSubMain

with the Namespaces "Main" "Main.SubMain" "Main.SubMain.SubSubMain" "Main.AnotherSubMain" etc.

To store general functions which are often or commonly used you could also create a library project.

Upvotes: 2

Related Questions