Thanks for the help, I have a few more questions.
mutex: I admit, I haven't taken the time to learn interfaces yet. In your example, the engine user has access to IGraphics, which I am trying to avoid. I'm trying to make the engine only expose the public instances of the engine.
joanus: The compiler tells me I can't use more than one protection modifier (public internal interface IBlah) (public internal class CBlah).
ernow: I made the constructor internal and the class public, and that partially fixed my problem, but I was aiming for a "black box" engine. Where the internal classes weren't visible from the outside through the intellisense, and only the instantiated classes would be visible. For example, using the above method, the end user can see CGraphics, CTextureManager, and CWindow, but all I want visible is the public instance classes I made (Graphics, TextureManager, Window).
On a sidenote, which type of engine design do you think is better? Doing everything through the engine:
using GameEngine;void Main(){ //... CEngine Engine = new CEngine(...); SPRITE_ID = Engine.SpriteManager.LoadSprite("sprite1.spr"); Engine.Graphics.DrawSprite(SPRITE_ID);}
or giving the engine user access to the engine sub classes:
using GameEngine;void Main(){ //... CEngine Engine = new CEngine(...); CGraphics Graphics = new CGraphics(...); CSprite sprite1 = new CSprite("sprite1.spr"); Graphics.DrawSprite(sprite1);}