static void Main(string[] args)
{
/*Access Modifiers*/ // -See Primitive Types Projects which is referencing this project to verify the examples
PublicClass publicClass = new PublicClass(); //You can access a public class from anywhere, even outside the assembly
InternalClass internalClass = new InternalClass(); //You can access an internal class from anywhere inside this assembly
InternalClassChild internalClassChild = new InternalClassChild();
//internalClass.ProtectedMethod(); -Impossible since we can't invoke protected methods outside the class and it's children
internalClassChild.InvokeParentProtectedMehtod(); //Protected method invoked through's child's public method
//publicClass.PrivateMethod(); -Impossible since we can't invoke private method's outside a class
publicClass.PublicMethod(); //Acessing the private method through a public method, helpful when performing Encapsulation
//AbtractClass abtractClass = new AbtractClass(); -Impossible since we can't instanciate Abtract classes
AbstractClass abtractClass = new ImplementingClass(); //ImplementingClass imlpements every method fromo Abstract class
abtractClass.AbtractMethod();
//Virtual method that shares functionality between the base class and the child's class
internalClassChild.VirtualMethod();
Console.WriteLine(StaticClass.StaticString); //For static classes, you do not need to create an instance, you can invoke the methods directly
SealedClass sealedClass = new SealedClass(); //You can create instances of a sealed class, but you can't inherit from it
Console.ReadLine();
}