"I have a class A with some public variables, these variables are to be accessed by other classes (Forms), so those classes create instances of A."
If the sole purpose of Class A is to be a "provider" of information (data), methods, or functions, to other Classes, then your design here is wrong: each
instance of Class A created by other Classes will have its own unique values for each field within A. Depending on how you defined the Class (sealed ?), or how you defined methods, and functions, other Classes might be able to inherit from 'A and change internal state, or, override A's methods or functions.
If you intend that Class A is
re-usable, and expect that other Classes will create instances of it, each with their own values stored in A's internal fields, then your design is okay.
You need to clarify what the purpose of Class A is, here.
You can create a static Class in which all fields, methods, and functions, are unchangeable, and are common to all users of the Class.
You can have a non-static Class in which some fields, methods, or functions, are static (unique to the Class itself), and other fields are not static (will be allocated with each instance of the Class created).
You can have a (non-static) Class of which only one instance can be created: that kind of Class is called a Singleton. CodeProject has lots of resources on Singletons: here's one: [
^].
Here's Jon Skeet (C# in Depth) on Singleton Classes in C#: [
^].